A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马富林 中级黑马   /  2013-12-8 22:11  /  1175 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么下面这段程序
  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, 下载次数: 19)

QQ图片20131208220949.jpg

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

2 个回复

倒序浏览
第二次你把相关的DataOutputStream都给注释掉就好了,因为你第二次运行的时候,又重新创建了一个111.txt文件把第一次的给覆盖了,里面是空白的,然后你在读取,里面没有内容就报错了
回复 使用道具 举报
本帖最后由 kongling 于 2013-12-8 22:31 编辑

呵呵,这个问题很有意思
原因是
DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt"));

与DataOutputStream dos=new DataOutputStream(new FileOutputStream("111.txt",true));
的区别,前者为覆盖写,所以即使你的文件以前有内容,也会被清空,变成空文件,所以读的话会出现.EOFException

假如是后者 追加写 的话,就不会覆盖原文件内容,不会出现这个异常

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马