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

我用jdbf.jar来读取不过老是报错:Thefieldlengthshouldbelessthan21digitsfornumericfields.Got:38,下面的... 我用jdbf.jar 来读取不过老是报错:The field length should be less than 21 digits for numeric fields. Got: 38, 下面的是代码 展开
 我来答
冰火两重天
推荐于2016-02-22 · TA获得超过1425个赞
知道小有建树答主
回答量:1489
采纳率:0%
帮助的人:1020万
展开全部
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=0;i<fieldsCount;i++){
               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
追问
您好 请问你有jdbf这个jar包吗?
追答
baidu搜索javadbf jar就有了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式