java 读写 dbf

用javabdf.jar读写bdf

读取

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();

		// 取出字段信息
		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) {
		}
	}
}

写dbf

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) {
		}   
	}
}
注意:writer.addRecord(rowData)时并不真正写入数据,在最后writer.write(fos)时才会把数据写入DBF文件,之前addRecord的数据暂时存放在内存中。如果数据量过大,这种方式显然不适合,内存中存储的数据过多,所以JavaDBF提供了另外一种机制来解决这个问题:Sync Mode(同步模式)。使用方法如下:用new DBFWriter(new File(path))实例化DBFWriter类,最后写入数据时用writer.write(),这样在每次addRecord时数据就被写入的DBF文件中。
因为初始化DBFWriter时传递了DBF文件,所以不用再定义DBF表结构,如果你定义并加载表结构会报异常。

你可能感兴趣的:(java,exception,String,object,null,Path)