DataOuput中readDouble()的问题

文章关键字:|DataOuput|readDouble()|问题|数据|读取|打印|

题目要求:想文件t1.txt中写入double型的数据然后在从文件t1.txt中读出并打印。

这本来是很简单的一个程序,可是我在写的时候却遇到了问题。下面是我的代码:

import java.io.*;
class TestDataRead{
public static void main(String[] args){

DataInputStream dis = null;
DataOutputStream dos = null;

try{
dos = new DataOutputStream(new FileOutputStream("t1.txt"));
dis = new DataInputStream(new FileInputStream(“t1.txt"));
}catch(FileNotFoundException e){
System.out.println("文件打开失败");
System.exit(-1);
}

double d;

try{
for(int i=1; i<3; i++){
dos.writeDouble((double)(i*10));//向文件中写入9个double型的数据
}
dos.flush();
dos.close();

while((d=dis.readDouble()) != -1){ //开始从文件中读取数据

System.out.println(d); //打印出数据
}
dis.close();
}catch(IOException e){
System.out.println(e);
e.printStackTrace();
System.exit(-1);
}
}
}

程序结果:
10.0
20.0
java.io.EOFException

这里抛出了一个例外。

查看API关于readDouble()方法的定义:

readDouble
public final double readDouble() throws IOException //参见DataInput的readDouble方法的常规协定。

从包含的输入流中读取此操作需要的字节。

指定者:接口 DataInput 中的 readDouble

返回:此输入流的下八个字节,将它们解释为一个 double。

抛出:

EOFException - 如果此输入流在读取这八个字节之前到达末尾。

IOException - 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。

可以看出若选择用readDouble()每次读出一个double数据,那么所有值都是有效的,所以不可再用返回值来侦测何时结束输入。相反,可用available()方法判断有多少字符可用。故将源代码中的红色部分代码用一下代码替换则可以的到预期效果。

while(dis.available() != 0){
d = dis.readDouble();
System.out.println(d);
}

dis.available()用来判断还有多少字符可供读入。


原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9195
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值