黑马程序员技术交流社区

标题: IO流的问题。请帮忙看看 [打印本页]

作者: 马富林    时间: 2013-12-8 22:11
标题: IO流的问题。请帮忙看看
为什么下面这段程序
  1. import java.io.*;
  2. class DataStreamDemo
  3. {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));
  7.                 DataInputStream dis=new DataInputStream(new FileInputStream("111.txt"));
  8.                 dos.writeInt(123);
  9.                 dos.writeDouble(77.654);
  10.                 int i=dis.readInt();
  11.                 double d=dis.readDouble();
  12.                   System.out.println(i);
  13.                 System.out.println(d);
  14.                 dos.close();
  15.                 dis.close();
  16.         }
  17. }
复制代码
先成功运行,可以打印出i 和d的值。第二次的时候我把两个write语句注释掉。再运行就会出现异常呢?
  1. import java.io.*;
  2. class DataStreamDemo
  3. {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));
  7.                 DataInputStream dis=new DataInputStream(new FileInputStream("111.txt"));
  8.                 //dos.writeInt(123);
  9.                 //dos.writeDouble(77.654);
  10.                 int i=dis.readInt();
  11.                 double d=dis.readDouble();
  12.                   System.out.println(i);
  13.                 System.out.println(d);
  14.                 dos.close();
  15.                 dis.close();
  16.         }
  17. }
复制代码
第二次运行的时候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)

QQ图片20131208220949.jpg

作者: 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