黑马程序员技术交流社区
标题:
IO流的问题。请帮忙看看
[打印本页]
作者:
马富林
时间:
2013-12-8 22:11
标题:
IO流的问题。请帮忙看看
为什么下面这段程序
import java.io.*;
class DataStreamDemo
{
public static void main(String[] args)throws IOException
{
DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));
DataInputStream dis=new DataInputStream(new FileInputStream("111.txt"));
dos.writeInt(123);
dos.writeDouble(77.654);
int i=dis.readInt();
double d=dis.readDouble();
System.out.println(i);
System.out.println(d);
dos.close();
dis.close();
}
}
复制代码
先成功运行,可以打印出i 和d的值。第二次的时候我把两个write语句注释掉。再运行就会出现异常呢?
import java.io.*;
class DataStreamDemo
{
public static void main(String[] args)throws IOException
{
DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));
DataInputStream dis=new DataInputStream(new FileInputStream("111.txt"));
//dos.writeInt(123);
//dos.writeDouble(77.654);
int i=dis.readInt();
double d=dis.readDouble();
System.out.println(i);
System.out.println(d);
dos.close();
dis.close();
}
}
复制代码
第二次运行的时候111.txt里面不是已经被写入数据了吗?,为什么读取还会出异常呢?,异常如下
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at DataStreamDemo.main(DataStreamDemo.java:12)
QQ图片20131208220949.jpg
(15.94 KB, 下载次数: 20)
下载附件
2013-12-8 22:10 上传
作者:
Weix1992
时间:
2013-12-8 22:29
第二次你把相关的DataOutputStream都给注释掉就好了,因为你第二次运行的时候,又重新创建了一个111.txt文件把第一次的给覆盖了,里面是空白的,然后你在读取,里面没有内容就报错了
作者:
kongling
时间:
2013-12-8 22:30
本帖最后由 kongling 于 2013-12-8 22:31 编辑
呵呵,这个问题很有意思
原因是
DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));
与DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt",true));
的区别,前者为覆盖写,所以即使你的文件以前有内容,也会被清空,变成空文件,所以读的话会出现.EOFException
假如是后者 追加写 的话,就不会覆盖原文件内容,不会出现这个异常
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2