java程序如何读取dbf文件? 最好写上代码?

JavaScript019

java程序如何读取dbf文件? 最好写上代码?,第1张

public class Rwdbf {

 public static void readDBF(String path)   

    {   

       InputStream fis = null

        try 

        {  

            //读取文件的输入流 

            fis  = new FileInputStream(path)

            //根据输入流初始化一个DBFReader实例,用来读取DBF文件信息

            DBFReader reader = new DBFReader(fis)  

            //调用DBFReader对实例方法得到path文件中字段的个数 

            int fieldsCount = reader.getFieldCount()

            System.out.println("字段数:"+fieldsCount)

            //取出字段信息   

            for( int i=0 i<fieldsCount i++)    

            {   

              DBFField field = reader.getField(i)

              System.out.println(field.getName())

            }   

            Object[] rowValues   

            //一条条取出path文件中记录   

            while((rowValues = reader.nextRecord()) != null) 

            {   

              for( int i=0 i<rowValues.length i++) 

              {   

                System.out.println(rowValues[i]) 

              }   

            }   

          }   

          catch(Exception e)    

          {   

          e.printStackTrace()  

          }  

          finally  

          {   

          try{   

               fis.close() 

          }catch(Exception e){}  

          } 

    }   

 

 public static void writeDBF(String path)

 {

  OutputStream fos = null

  try  

  {   

      //定义DBF文件字段   

      DBFField[] fields = new DBFField[3] 

      //分别定义各个字段信息,setFieldName和setName作用相同, 

      //只是setFieldName已经不建议使用   

      fields[0] = new DBFField()   

      //fields[0].setFieldName("emp_code") 

      fields[0].setName("semp_code")   

      fields[0].setDataType(DBFField.FIELD_TYPE_C)   

      fields[0].setFieldLength(10)   

      fields[1] = new DBFField()   

      //fields[1].setFieldName("emp_name") 

      fields[1].setName("emp_name")   

      fields[1].setDataType(DBFField.FIELD_TYPE_C)   

      fields[1].setFieldLength(20)   

      fields[2] = new DBFField()   

      //fields[2].setFieldName("salary") 

      fields[2].setName("salary")  

      fields[2].setDataType(DBFField.FIELD_TYPE_N)   

      fields[2].setFieldLength(12)   

      fields[2].setDecimalCount(2)   

      //DBFWriter writer = new DBFWriter(new File(path))   

      //定义DBFWriter实例用来写DBF文件   

      DBFWriter writer = new DBFWriter() 

      //把字段信息写入DBFWriter实例,即定义表结构  

      writer.setFields(fields)   

      //一条条的写入记录   

      Object[] rowData = new Object[3] 

      rowData[0] = "1000"   

      rowData[1] = "John"   

      rowData[2] = new Double(5000.00)

      writer.addRecord(rowData)   

      rowData = new Object[3]  

      rowData[0] = "1001"  

      rowData[1] = "Lalit" 

      rowData[2] = new Double(3400.00)   

      writer.addRecord(rowData)   

      rowData = new Object[3]

      rowData[0] = "1002"   

      rowData[1] = "Rohit"  

      rowData[2] = new Double(7350.00)  

      writer.addRecord(rowData)   

      //定义输出流,并关联的一个文件   

      fos = new FileOutputStream(path)

      //写入数据   

      writer.write(fos)   

      //writer.write()  

  }catch(Exception e)   

  {   

      e.printStackTrace()   

  }   

  finally  

  {   

      try{   

      fos.close()

      }catch(Exception e){}

  }

 }

 public static void main(String[] args){

  String path ="E:\\tmp\\2\\xx.dbf"

  try {

   InputStream fis = new FileInputStream(path)

   DBFReader reader = new DBFReader(fis) 

   int fieldsCount = reader.getFieldCount()

            System.out.println("字段数:"+fieldsCount)

            DBFField[] df = new DBFField[fieldsCount+2]

            for( int i=0 i<fieldsCount i++)    

            {   

              df[i] = reader.getField(i)

              System.out.println("field"+i+":"+df[i].getName())

            }

            df[fieldsCount] = new DBFField()

            df[fieldsCount].setName("add1")

            df[fieldsCount].setDataType(DBFField.FIELD_TYPE_C)

            df[fieldsCount].setFieldLength(10)

            df[fieldsCount+1] = new DBFField()

            df[fieldsCount+1].setName("add2")

            df[fieldsCount+1].setDataType(DBFField.FIELD_TYPE_C)

            df[fieldsCount+1].setFieldLength(10)

            DBFWriter writer = new DBFWriter()

            writer.setFields(df)

            Object[] rowValues

            Object[] rowValues1 = new Object[fieldsCount+2]

            //一条条取出path文件中记录   

            while((rowValues = reader.nextRecord()) != null) 

            { 

              for(int i=0i<fieldsCounti++){

               rowValues1[i] = rowValues[i]

              }

              rowValues1[fieldsCount]="x"

              rowValues1[fieldsCount+1]="xx"

              writer.addRecord(rowValues1)

            } 

            

            path ="E:\\tmp\\2\\test2.dbf"

            OutputStream fos = new FileOutputStream(path)

          //写入数据   

          writer.write(fos)   

          System.out.println("OVER")

            

  } catch (FileNotFoundException | DBFException e) {

   // TODO Auto-generated catch block

   e.printStackTrace()

  }

 }

}

详细出处参考:http://www.jb51.net/article/46344.htm

 Java读取DBF文件,需要加载开源jar包JavaDBF.jar,然后使用里面的方法进行读写,示例如下:

package search

public class ReadDBF {

public static void main(String args[])

   

    {

readDBF()

    }

private static void readDBF()

{

     try

     {

      System.out.println("正在读取文件!")

   

      DBFReader dbfreader = new DBFReader("D:\\ZG2011格式.dbf")

      for(int b = 0b<dbfreader.getFieldCount()b++)

      {

       if(b>0)

       { System.out.print(",")}

       System.out.print(dbfreader.getField(b).getName().trim().toUpperCase())

      

       if(b == (dbfreader.getFieldCount()-1))

        System.out.print("\n")

      } 

      for(int i = 0dbfreader.hasNextRecord()i++)

      {

       String[] aobj = dbfreader.nextRecordString()

       for(int b = 0b<dbfreader.getFieldCount()b++)

       {

        if(b>0)

         System.out.print(",")

        System.out.print(aobj[b].trim())

     

        if(b == (dbfreader.getFieldCount()-1))

         System.out.print("\n")

     

       } 

      }

      System.out.println("读取文件成功!")

     }

     catch(Exception e)

     {

      System.out.print(e.getMessage())

     }

}

}

对于dbf是什么文件,我想一些朋友都不太注意,因为接触的很少,除非是一些整天编程的朋友,或者是一些专 门 研究相关文件的朋友才会有所关注。简单地讲DBF就是一个格式,这个格式是存储数据用的,因此dbf文件也叫做数据库格式文件。

一、 dbf格式的来源

到底哪些软件会应用到这样的格式呢?像Foxbase,Dbase,Visual FoxPro等这些数据库的处理系统都会需要这种格式的文件。也可以这么说,DBF格式的数据库类型是我们经常会用到的一种桌面型的数据库模式。它是一种结构化的标准格式,主要适用于数据存取的功能,在商业里面应用的比较多一些。

dbf是什么文件?它对于各个企业的关系是怎样的呢?其实这种格式文件是数据交换工具,被广泛的在各企业以及各个事业单位里面使用。

二、dbf文件的读取

那么我们如何读取这样的文件呢?DBFViewerPlus1.67,DBF表查看器,这个软件可以很好的很方便的查看以及编辑相关的DBF文件。这个软件能够轻而易举的搜索以及筛选数据库里面的字段值。此外除了这一款软件之外,还有DataBaseBrowser数据库浏览器。这个软件也是可以查询数据库资料的一种工具类的软件。它既可以让我们看到数据库的结构,也可以让我们查看到相关的数据。此外一些数据库信息,表索引也可以查看得到。

打开这类dbf文件我们也可以用excel打开,ACCESS也能够打开这类数据库文件。