<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-2  評論-16  文章-12  trackbacks-0

    1.JDBField.java


    package com.svcon.jdbf;

    import java.text.*;
    import java.util.Date;

    public class JDBField
    {

        public JDBField(String s, char c, int i, int j)
            throws JDBFException
        {
            if(s.length() > 10)
                throw new JDBFException("The field name is more than 10 characters long: " + s);
            if(c != 'C' && c != 'N' && c != 'L' && c != 'D' && c != 'F')
                throw new JDBFException("The field type is not a valid. Got: " + c);
            if(i < 1)
                throw new JDBFException("The field length should be a positive integer. Got: " + i);
            if(c == 'C' && i >= 254)
                throw new JDBFException("The field length should be less than 254 characters for character fields. Got: " + i);
            if(c == 'N' && i >= 21)
                throw new JDBFException("The field length should be less than 21 digits for numeric fields. Got: " + i);
            if(c == 'L' && i != 1)
                throw new JDBFException("The field length should be 1 characater for logical fields. Got: " + i);
            if(c == 'D' && i != 8)
                throw new JDBFException("The field length should be 8 characaters for date fields. Got: " + i);
            if(c == 'F' && i >= 21)
                throw new JDBFException("The field length should be less than 21 digits for floating point fields. Got: " + i);
            if(j < 0)
                throw new JDBFException("The field decimal count should not be a negative integer. Got: " + j);
            if((c == 'C' || c == 'L' || c == 'D') && j != 0)
                throw new JDBFException("The field decimal count should be 0 for character, logical, and date fields. Got: " + j);
            if(j > i - 1)
            {
                throw new JDBFException("The field decimal count should be less than the length - 1. Got: " + j);
            } else
            {
                name = s;
                type = c;
                length = i;
                decimalCount = j;
                return;
            }
        }

        public String getName()
        {
            return name;
        }

        public char getType()
        {
            return type;
        }

        public int getLength()
        {
            return length;
        }

        public int getDecimalCount()
        {
            return decimalCount;
        }

        public String format(Object obj)
            throws JDBFException
        {
            if(type == 'N' || type == 'F')
            {
                if(obj == null)
                    obj = new Double(0.0D);
                if(obj instanceof Number)
                {
                    Number number = (Number)obj;
                    StringBuffer stringbuffer = new StringBuffer(getLength());
                    for(int i = 0; i < getLength(); i++)
                        stringbuffer.append("#");

                    if(getDecimalCount() > 0)
                        stringbuffer.setCharAt(getLength() - getDecimalCount() - 1, '.');
                    DecimalFormat decimalformat = new DecimalFormat(stringbuffer.toString());
                    String s1 = decimalformat.format(number);
                    int k = getLength() - s1.length();
                    if(k < 0)
                        throw new JDBFException("Value " + number + " cannot fit in pattern: '" + stringbuffer + "'.");
                    StringBuffer stringbuffer2 = new StringBuffer(k);
                    for(int l = 0; l < k; l++)
                        stringbuffer2.append(" ");

                    return stringbuffer2 + s1;
                } else
                {
                    throw new JDBFException("Expected a Number, got " + obj.getClass() + ".");
                }
            }
            if(type == 'C')
            {
                if(obj == null)
                    obj = "";
                if(obj instanceof String)
                {
                    String s = (String)obj;
                    if(s.length() > getLength())
                        throw new JDBFException("'" + obj + "' is longer than " + getLength() + " characters.");
                    StringBuffer stringbuffer1 = new StringBuffer(getLength() - s.length());
                    for(int j = 0; j < getLength() - s.length(); j++)
                        stringbuffer1.append(' ');

                    return s + stringbuffer1;
                } else
                {
                    throw new JDBFException("Expected a String, got " + obj.getClass() + ".");
                }
            }
            if(type == 'L')
            {
                if(obj == null)
                    obj = new Boolean(false);
                if(obj instanceof Boolean)
                {
                    Boolean boolean1 = (Boolean)obj;
                    return boolean1.booleanValue() ? "Y" : "N";
                } else
                {
                    throw new JDBFException("Expected a Boolean, got " + obj.getClass() + ".");
                }
            }
            if(type == 'D')
            {
                if(obj == null)
                    obj = new Date();
                if(obj instanceof Date)
                {
                    Date date = (Date)obj;
                    SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMdd");
                    return simpledateformat.format(date);
                } else
                {
                    throw new JDBFException("Expected a Date, got " + obj.getClass() + ".");
                }
            } else
            {
                throw new JDBFException("Unrecognized JDBFField type: " + type);
            }
        }

        public Object parse(String s)
            throws JDBFException
        {
            s = s.trim();
            if(type == 'N' || type == 'F')
            {
                if(s.equals(""))
                    s = "0";
                try
                {
                    if(getDecimalCount() == 0)
                        return new Long(s);
                    else
                        return new Double(s);
                }
                catch(NumberFormatException numberformatexception)
                {
                    throw new JDBFException(numberformatexception);
                }
            }
            if(type == 'C')
                return s;
            if(type == 'L')
            {
                if(s.equals("Y") || s.equals("y") || s.equals("T") || s.equals("t"))
                    return new Boolean(true);
                if(s.equals("N") || s.equals("n") || s.equals("F") || s.equals("f"))
                    return new Boolean(false);
                else
                    throw new JDBFException("Unrecognized value for logical field: " + s);
            }
            if(type == 'D')
            {
                SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMdd");
                try
                {
                    if("".equals(s))
                        return null;
                    else
                        return simpledateformat.parse(s);
                }
                catch(ParseException parseexception)
                {
                    throw new JDBFException(parseexception);
                }
            } else
            {
                throw new JDBFException("Unrecognized JDBFField type: " + type);
            }
        }

        public String toString()
        {
            return name;
        }

        private String name;
        private char type;
        private int length;
        private int decimalCount;
    }

    2.DBFReader.java


    package com.svcon.jdbf;

    import java.io.*;

    public class DBFReader
    {

        public DBFReader(String s)
            throws JDBFException
        {
            stream = null;
            fields = null;
            nextRecord = null;
            try
            {
                init(new FileInputStream(s));
            }
            catch(FileNotFoundException filenotfoundexception)
            {
                throw new JDBFException(filenotfoundexception);
            }
        }

        public DBFReader(InputStream inputstream)
            throws JDBFException
        {
            stream = null;
            fields = null;
            nextRecord = null;
            init(inputstream);
        }

        private void init(InputStream inputstream)
            throws JDBFException
        {
            try
            {
                stream = new DataInputStream(inputstream);
                int i = readHeader();
                fields = new JDBField[i];
                int j = 1;
                for(int k = 0; k < i; k++)
                {
                    fields[k] = readFieldHeader();
                    j += fields[k].getLength();
                }

                if(stream.read() < 1)
                    throw new JDBFException("Unexpected end of file reached.");
                nextRecord = new byte[j];
                try
                {
                    stream.readFully(nextRecord);
                }
                catch(EOFException eofexception)
                {
                    nextRecord = null;
                    stream.close();
                }
            }
            catch(IOException ioexception)
            {
                throw new JDBFException(ioexception);
            }
        }

        private int readHeader()
            throws IOException, JDBFException
        {
            byte abyte0[] = new byte[16];
            try
            {
                stream.readFully(abyte0);
            }
            catch(EOFException eofexception)
            {
                throw new JDBFException("Unexpected end of file reached.");
            }
            int i = abyte0[8];
            if(i < 0)
                i += 256;
            i += 256 * abyte0[9];
            i = --i / 32;
            i--;
            try
            {
                stream.readFully(abyte0);
            }
            catch(EOFException eofexception1)
            {
                throw new JDBFException("Unexpected end of file reached.");
            }
            return i;
        }

        private JDBField readFieldHeader()
            throws IOException, JDBFException
        {
            byte abyte0[] = new byte[16];
            try
            {
                stream.readFully(abyte0);
            }
            catch(EOFException eofexception)
            {
                throw new JDBFException("Unexpected end of file reached.");
            }
            StringBuffer stringbuffer = new StringBuffer(10);
            for(int i = 0; i < 10; i++)
            {
                if(abyte0[i] == 0)
                    break;
                stringbuffer.append((char)abyte0[i]);
            }

            char c = (char)abyte0[11];
            try
            {
                stream.readFully(abyte0);
            }
            catch(EOFException eofexception1)
            {
                throw new JDBFException("Unexpected end of file reached.");
            }
            int j = abyte0[0];
            int k = abyte0[1];
            if(j < 0)
                j += 256;
            if(k < 0)
                k += 256;
            return new JDBField(stringbuffer.toString(), c, j, k);
        }

        public int getFieldCount()
        {
            return fields.length;
        }

        public JDBField getField(int i)
        {
            return fields[i];
        }

        public boolean hasNextRecord()
        {
            return nextRecord != null;
        }

        public Object[] nextRecord()
            throws JDBFException
        {
            if(!hasNextRecord())
                throw new JDBFException("No more records available.");
            Object aobj[] = new Object[fields.length];
            int i = 1;
            for(int j = 0; j < aobj.length; j++)
            {
                int k = fields[j].getLength();
                StringBuffer stringbuffer = new StringBuffer(k);
                stringbuffer.append(new String(nextRecord, i, k));
                aobj[j] = fields[j].parse(stringbuffer.toString());
                i += fields[j].getLength();
            }

            try
            {
                stream.readFully(nextRecord);
            }
            catch(EOFException eofexception)
            {
                nextRecord = null;
            }
            catch(IOException ioexception)
            {
                throw new JDBFException(ioexception);
            }
            return aobj;
        }

        public void close()
            throws JDBFException
        {
            nextRecord = null;
            try
            {
                stream.close();
            }
            catch(IOException ioexception)
            {
                throw new JDBFException(ioexception);
            }
        }

        private DataInputStream stream;
        private JDBField fields[];
        private byte nextRecord[];
    }

    3.DBFWriter.java


    package com.svcon.jdbf;

    import java.io.*;
    import java.util.Calendar;

    public class DBFWriter
    {

        public DBFWriter(String s, JDBField ajdbfield[])
            throws JDBFException
        {
            stream = null;
            recCount = 0;
            fields = null;
            fileName = null;
            dbfEncoding = null;
            fileName = s;
            try
            {
                init(new FileOutputStream(s), ajdbfield);
            }
            catch(FileNotFoundException filenotfoundexception)
            {
                throw new JDBFException(filenotfoundexception);
            }
        }

        public DBFWriter(OutputStream outputstream, JDBField ajdbfield[])
            throws JDBFException
        {
            stream = null;
            recCount = 0;
            fields = null;
            fileName = null;
            dbfEncoding = null;
            init(outputstream, ajdbfield);
        }

        public DBFWriter(String s, JDBField ajdbfield[], String s1)
            throws JDBFException
        {
            stream = null;
            recCount = 0;
            fields = null;
            fileName = null;
            dbfEncoding = null;
            fileName = s;
            try
            {
                dbfEncoding = s1;
                init(new FileOutputStream(s), ajdbfield);
            }
            catch(FileNotFoundException filenotfoundexception)
            {
                throw new JDBFException(filenotfoundexception);
            }
        }

        private void init(OutputStream outputstream, JDBField ajdbfield[])
            throws JDBFException
        {
            fields = ajdbfield;
            try
            {
                stream = new BufferedOutputStream(outputstream);
                writeHeader();
                for(int i = 0; i < ajdbfield.length; i++)
                    writeFieldHeader(ajdbfield[i]);

                stream.write(13);
                stream.flush();
            }
            catch(Exception exception)
            {
                throw new JDBFException(exception);
            }
        }

        private void writeHeader()
            throws IOException
        {
            byte abyte0[] = new byte[16];
            abyte0[0] = 3;
            Calendar calendar = Calendar.getInstance();
            abyte0[1] = (byte)(calendar.get(1) - 1900);
            abyte0[2] = (byte)calendar.get(2);
            abyte0[3] = (byte)calendar.get(5);
            abyte0[4] = 0;
            abyte0[5] = 0;
            abyte0[6] = 0;
            abyte0[7] = 0;
            int i = (fields.length + 1) * 32 + 1;
            abyte0[8] = (byte)(i % 256);
            abyte0[9] = (byte)(i / 256);
            int j = 1;
            for(int k = 0; k < fields.length; k++)
                j += fields[k].getLength();

            abyte0[10] = (byte)(j % 256);
            abyte0[11] = (byte)(j / 256);
            abyte0[12] = 0;
            abyte0[13] = 0;
            abyte0[14] = 0;
            abyte0[15] = 0;
            stream.write(abyte0, 0, abyte0.length);
            for(int l = 0; l < 16; l++)
                abyte0[l] = 0;

            stream.write(abyte0, 0, abyte0.length);
        }

        private void writeFieldHeader(JDBField jdbfield)
            throws IOException
        {
            byte abyte0[] = new byte[16];
            String s = jdbfield.getName();
            int i = s.length();
            if(i > 10)
                i = 10;
            for(int j = 0; j < i; j++)
                abyte0[j] = (byte)s.charAt(j);

            for(int k = i; k <= 10; k++)
                abyte0[k] = 0;

            abyte0[11] = (byte)jdbfield.getType();
            abyte0[12] = 0;
            abyte0[13] = 0;
            abyte0[14] = 0;
            abyte0[15] = 0;
            stream.write(abyte0, 0, abyte0.length);
            for(int l = 0; l < 16; l++)
                abyte0[l] = 0;

            abyte0[0] = (byte)jdbfield.getLength();
            abyte0[1] = (byte)jdbfield.getDecimalCount();
            stream.write(abyte0, 0, abyte0.length);
        }

        public void addRecord(Object aobj[])
            throws JDBFException
        {
            if(aobj.length != fields.length)
                throw new JDBFException("Error adding record: Wrong number of values. Expected " + fields.length + ", got " + aobj.length + ".");
            int i = 0;
            for(int j = 0; j < fields.length; j++)
                i += fields[j].getLength();

            byte abyte0[] = new byte[i];
            int k = 0;
            for(int l = 0; l < fields.length; l++)
            {
                String s = fields[l].format(aobj[l]);
                byte abyte1[];
                try
                {
                    if(dbfEncoding != null)
                        abyte1 = s.getBytes(dbfEncoding);
                    else
                        abyte1 = s.getBytes();
                }
                catch(UnsupportedEncodingException unsupportedencodingexception)
                {
                    throw new JDBFException(unsupportedencodingexception);
                }
                for(int i1 = 0; i1 < fields[l].getLength(); i1++)
                    abyte0[k + i1] = abyte1[i1];

                k += fields[l].getLength();
            }

            try
            {
                stream.write(32);
                stream.write(abyte0, 0, abyte0.length);
                stream.flush();
            }
            catch(IOException ioexception)
            {
                throw new JDBFException(ioexception);
            }
            recCount++;
        }

        public void close()
            throws JDBFException
        {
            try
            {
                stream.write(26);
                stream.close();
                RandomAccessFile randomaccessfile = new RandomAccessFile(fileName, "rw");
                randomaccessfile.seek(4L);
                byte abyte0[] = new byte[4];
                abyte0[0] = (byte)(recCount % 256);
                abyte0[1] = (byte)((recCount / 256) % 256);
                abyte0[2] = (byte)((recCount / 0x10000) % 256);
                abyte0[3] = (byte)((recCount / 0x1000000) % 256);
                randomaccessfile.write(abyte0, 0, abyte0.length);
                randomaccessfile.close();
            }
            catch(IOException ioexception)
            {
                throw new JDBFException(ioexception);
            }
        }

        private BufferedOutputStream stream;
        private int recCount;
        private JDBField fields[];
        private String fileName;
        private String dbfEncoding;
    }

    4.JDBFException.java


    package com.svcon.jdbf;

    import java.io.PrintStream;
    import java.io.PrintWriter;

    public class JDBFException extends Exception
    {

        public JDBFException(String s)
        {
            this(s, null);
        }

        public JDBFException(Throwable throwable)
        {
            this(throwable.getMessage(), throwable);
        }

        public JDBFException(String s, Throwable throwable)
        {
            super(s);
            detail = throwable;
        }

        public String getMessage()
        {
            if(detail == null)
                return super.getMessage();
            else
                return super.getMessage();
        }

        public void printStackTrace(PrintStream printstream)
        {
            if(detail == null)
            {
                super.printStackTrace(printstream);
                return;
            }
            PrintStream printstream1 = printstream;
            printstream1.println(this);
            detail.printStackTrace(printstream);
            return;
        }

        public void printStackTrace()
        {
            printStackTrace(System.err);
        }

        public void printStackTrace(PrintWriter printwriter)
        {
            if(detail == null)
            {
                super.printStackTrace(printwriter);
                return;
            }
            PrintWriter printwriter1 = printwriter;

            printwriter1.println(this);
            detail.printStackTrace(printwriter);
            return;
        }

        private Throwable detail;
    }

    5.Test.java (供測試)

    import com.svcon.jdbf.DBFReader;
    import java.io.PrintStream;
    import java.net.URL;

    public class Test
    {

        public Test()
        {
        }

        public static void main(String args[])
            throws Exception
        {
            DBFReader dbfreader = new DBFReader("c:/test.dbf");
            int i;
            for(i = 0; dbfreader.hasNextRecord(); i++)
            {
                Object aobj[] = dbfreader.nextRecord();
            }

            System.out.println("Total Count: " + i);
        }
    }

    posted on 2006-03-14 17:23 fadesea 閱讀(3214) 評論(3)  編輯  收藏 所屬分類: JAVA

    評論:
    # re: java操作DBF文件源文件[未登錄] 2007-05-31 11:25 | eric
    能生成中方字段名么?  回復  更多評論
      
    # re: java操作DBF文件源文件[未登錄] 2007-05-31 11:26 | eric
    能生成中文字段名么?   回復  更多評論
      
    # re: java操作DBF文件源文件 2009-12-31 15:57 | 誰的錯
    dbf 3.0的版本這個類讀不了  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久水蜜桃亚洲AV无码精品| 亚洲成AV人片久久| 国产亚洲欧美日韩亚洲中文色| 18勿入网站免费永久| 亚洲不卡视频在线观看| av免费不卡国产观看| 67194在线午夜亚洲| 男人的好看免费观看在线视频| 亚洲综合校园春色| 思思99re66在线精品免费观看| 亚洲成aⅴ人片久青草影院按摩| 精品免费久久久久久成人影院| 性色av极品无码专区亚洲| 亚洲成aⅴ人片久青草影院| 一级片在线免费看| 亚洲AV无码国产丝袜在线观看| 99视频免费观看| 亚洲伦理中文字幕| 全亚洲最新黄色特级网站 | 国产亚洲精品免费视频播放| 亚洲国产精品特色大片观看完整版| 免费人成黄页在线观看日本| 91嫩草私人成人亚洲影院| 成人免费视频77777| 黄色网页免费观看| 久久国产精品亚洲一区二区| 希望影院高清免费观看视频| 天天综合亚洲色在线精品| 久久被窝电影亚洲爽爽爽| 亚洲免费在线观看视频| 亚洲AV成人片无码网站| 亚洲乱码日产一区三区| 久草免费在线观看视频| 美女被吸屁股免费网站| 亚洲va在线va天堂va不卡下载| 处破痛哭A√18成年片免费| g0g0人体全免费高清大胆视频| 亚洲黄色高清视频| 亚洲成人一区二区| 青青在线久青草免费观看| xxxxxx日本处大片免费看|