Java把double数据写入文件中

public class ReadOrWriteObject {

	private FileInputStream fileIns = null ;//文件输入流
	private FileOutputStream   fileOts = null;//文件输出流
	private ObjectInputStream  objectIns = null ;//对象输入流
	private ObjectOutputStream objectOts = null ;//对象输出流
	private String fileName = null;//待处理的文件名
	public static Boolean FileRead = true ;
	public static Boolean FileWrite = false ;

	/**
	 * 
	 * @param fileName:文件名
	 */
	public ReadOrWriteObject(String fileName){
		this.fileName = fileName ;
	}
	
	/**
	 * 创建对象之后,首先必须以某种方式打开文件,如读的方式,或者写的方式
	 * @param fileName: The name of the file.
	 * @param bool: Whether the file read or write.如 FileRead or FileWrite
	 * @return
	 */
	public Boolean openFile(Boolean bool){
		
		if(bool)//if bool is true,the file is read.
		{
			try {
				this.fileIns = new FileInputStream(this.fileName);
				this.objectIns = new ObjectInputStream(fileIns);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}catch (IOException e) {
				e.printStackTrace();
			}
		}
		else{
			try {
				this.fileOts = new FileOutputStream(this.fileName);
				this.objectOts = new ObjectOutputStream(this.fileOts);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return true ;
	}
	
	/**
	 * 关闭文件流,对象流
	 * @return 成功关闭返回true
	 */
	public Boolean closeFile(){
		
		if(null !=this.fileIns){
			try {
				this.objectIns.close();
				this.fileIns.close() ;
				objectIns = null;
				fileIns = null ;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if(null != this.fileOts){
			try {
				this.objectOts.close();
				this.fileOts.close();
				objectOts = null ;
				fileOts = null ;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return true ;
	}
	
	/**
	 * 刷新缓冲区
	 */
	public void flush(){
		try {
			this.objectOts.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * @param d 需要写入文件的double数据
	 * @return 写入成功则返回true,否则返回false
	 */
	public Boolean writeDouble(double d){
		if(this.objectOts!=null){
			try {
				this.objectOts.writeDouble(d);
			} catch (IOException e) {
				e.printStackTrace();
			}
			return true ;
		}else{
			return false ;
		}
	}
	
	/**
	 * 读取double型数据
	 * @return 返回无穷小为false
	 */
	public double readDouble(){
		double d=0;
		if(this.objectIns!=null){	
			try {
				d = this.objectIns.readDouble();//读取到文件末尾,被EOFException捕获
				
			} catch (EOFException e) {
				this.closeFile();
				return Double.MIN_NORMAL;
			} catch (IOException e) {
				this.closeFile();
				e.printStackTrace();
			}
			return d ;
		}
		else{
			return Double.MIN_NORMAL;
		}
	}
	
	
	/**
	 * Example
	 * @param args
	 */
	public static void main(String[] args) {
		//写入Double数据
		String file = "F:\\1.txt";
		ReadOrWriteObject rOd = new ReadOrWriteObject(file);
		rOd.openFile(ReadOrWriteObject.FileWrite);
		for(int i =0;i<1000;i++)
			rOd.writeDouble(i);
		rOd.flush();
		rOd.closeFile();
		
		//"-----分割线-----"
		//读取Double数据
		double d =0 ;
		rOd.openFile(ReadOrWriteObject.FileRead);
		while(true){
			d = rOd.readDouble() ;
			if(d == Double.MIN_NORMAL){//读取文件的终止符,双精度最小值,在文件中已经关闭了相关的流
				break;
			}
			else{
				System.out.println(d);
			}
		}
		rOd.closeFile();
		rOd = null ;
	}
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javadbf-0.4.0版本本已增加setCharactersetName方法支持文读写,但在写入时会发生写入数据丢失问题。资源压缩文件包含有修改后的jar文件和读写测试类。 @Test public void testWrite1(){ File file=new File(this.folder, "测试数据.DBF"); 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(200); 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(); writer.setCharactersetName("GBK"); // 把字段信息写入DBFWriter实例,即定义表结构 writer.setFields(fields); // 一条条的写入记录 Object[] rowData = new Object[3]; rowData[0] = "1000234567"; // "文";// -42 -48 -50 -60 rowData[1] = "文"; 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(file); // 写入数据 /* * 注意:writer.addRecord(rowData)时并不真正写入数据,在最后writer.write(fos)时才会把数据写入DBF文件,之前addRecord的数据暂时存放在内存。如果数据量过大,这种方式显然不适合. */ writer.write(fos); } catch (Exception e) { e.printStackTrace(); } finally { try { fos.close(); } catch (Exception e) { } } } /** * JavaDBF提供的另外一种机制:Sync Mode(同步模式)解决数据量过大这个问题 */ @Test public void testWrite2(){ File file=new File(this.folder, "测试数据.DBF"); DBFWriter writer = null; try { if(file.exists()){ file.delete(); } // 定义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(200); 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文件 writer = new DBFWriter(file); writer.setCharactersetName("GBK"); // 把字段信息写入DBFWriter实例,即定义表结构 writer.setFields(fields); // 一条条的写入记录 Object[] rowData = new Object[3]; rowData[0] = "1000234567"; rowData[1] = "文1"; 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); } catch (Exception e) { e.printStackTrace(); } finally { if(writer!=null){ try { writer.write(); } catch (Exception e) {} } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值