最近在写一个程序时遇到这样一个问题。
题目要求:想文件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
- 参见
DataInput
的 readDouble
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
-
- 指定者:
- 接口
中的
-
- 返回:
- 此输入流的下八个字节,将它们解释为一个
double
。
- 抛出:
- 如果此输入流在读取这八个字节之前到达末尾。
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
可以看出
若选择用readDouble()每次读出一个double数据,那么所有值都是有效的,所以不可再用返回值来侦测何时结束输入。相反,可用available()方法判断有多少字符可用。故将源代码中的红色部分代码用一下代码替换则可以的到预期效果。
while(dis.available() != 0){
d = dis.readDouble();
System.out.println(d);
}
dis.available()用来判断还有多少字符可供读入。
阅读(3140) | 评论(0) | 转发(0) |