黑马程序员技术交流社区

标题: 帮看看,为啥总是报错,谢喽 [打印本页]

作者: 王龙    时间: 2013-3-29 20:08
标题: 帮看看,为啥总是报错,谢喽
import java.io.*;
public class ReadAndWrite {
     public static void main(String[] args) throws IOException {
                FileOutputStream fos=new FileOutputStream("d:\\b.txt");
                BufferedOutputStream bos=new BufferedOutputStream(fos);
                DataOutputStream dos=new DataOutputStream(bos);
                dos.writeInt(1);
                dos.writeLong(2);
                dos.writeChar('a');
                dos.writeUTF("abc");
                fos.close();
                bos.close();
                dos.close();
                System.out.println("=======文件写入完成========");
                FileInputStream fis=new FileInputStream("d:\\a.txt");
                BufferedInputStream bis=new BufferedInputStream(fis);
                DataInputStream dis=new DataInputStream(bis);
               
                System.out.println(dis.readInt());
                System.out.println(dis.readLong());
                System.out.println(dis.readChar());
                System.out.println(dis.readUTF());
               
                fis.close();
                bis.close();
                dis.close();
               
        }
}
作者: 邵震    时间: 2013-3-29 20:19
我把class前面的public去掉就能打印了  结果是10000

我不删那个把文件名改成一致的就报错


=======文件写入完成========
Exception in thread "main" java.io.FileNotFoundException: d:\a.txt (系统找不到指
定的文件。)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:97)
        at ReadAndWrite.main(ReadAndWrite.java:29)

这个是你说的错误吗
作者: 刘子义    时间: 2013-3-29 20:28
你把流的关闭顺序全写反了
作者: 魏福伟    时间: 2013-3-29 20:31
我给你试试;
照你的程序运行,先是Exception in thread "main" java.io.FileNotFoundException: d:\a.txt (系统找不到指
定的文件。)
然后我在d盘创建这个文件,还是错误,然后看了一下你的程序,
你是不是想把 dos.writeInt(1);
                dos.writeLong(2);
                dos.writeChar('a');
                dos.writeUTF("abc");
写到一个文件,然后再读出来(我是这样理解的),把a.txt改成b.txt还是报错,最后发现b.txt中没有写进去,发现你关闭流的顺序不对,
应该是先创建的流后关闭
  1. import java.io.*;

  2. public class ReadAndWrite
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileOutputStream fos = new FileOutputStream("d:\\b.txt");
  7.                 BufferedOutputStream bos = new BufferedOutputStream(fos);
  8.                 DataOutputStream dos = new DataOutputStream(bos);
  9.                 dos.writeInt(1);
  10.                 dos.writeLong(2);
  11.                 dos.writeChar('a');
  12.                 dos.writeUTF("abc");

  13.                 dos.close();
  14.                 bos.close();
  15.                 fos.close();
  16.                 System.out.println("=======文件写入完成========");
  17.                 FileInputStream fis = new FileInputStream("d:\\b.txt");
  18.                 BufferedInputStream bis = new BufferedInputStream(fis);
  19.                 DataInputStream dis = new DataInputStream(bis);

  20.                 System.out.println(dis.readInt());
  21.                 System.out.println(dis.readLong());
  22.                 System.out.println(dis.readChar());
  23.                 System.out.println(dis.readUTF());

  24.                 fis.close();
  25.                 bis.close();
  26.                 dis.close();

  27.         }
  28. }
复制代码

作者: 我手心里的宝    时间: 2013-3-29 20:58
能把你的错误信息贴一下吗
作者: 何衍其    时间: 2013-3-30 15:46
本帖最后由 何衍其 于 2013-3-30 15:48 编辑

调整你的代码后,可以反复的正常运行,代码如下:
  1. import java.io.*;

  2. public class DataStreamTest {
  3.     public static void main(String[] args) throws IOException {
  4.         
  5.         // 先在D盘创建"b.txt"
  6.         FileOutputStream fos = new FileOutputStream("d:\\b.txt");
  7.         BufferedOutputStream bos = new BufferedOutputStream(fos);
  8.         DataOutputStream dos = new DataOutputStream(bos);
  9.         dos.writeInt(1);
  10.         dos.writeLong(2);
  11.         dos.writeChar('a');
  12.         dos.writeUTF("abc");
  13.         
  14.         // 先关闭最后的过滤流;如果先关闭了fos,而dos和bos还需要用fos
  15.         dos.close();
  16.         bos.close();
  17.         fos.close();
  18.         
  19.         System.out.println("=======文件写入完成========");

  20.         // 把之前的"d:\\a.txt"改成了“d:\\b.txt”,因为需要读一个已存在的文件
  21.         FileInputStream fis = new FileInputStream("d:\\b.txt");
  22.         BufferedInputStream bis = new BufferedInputStream(fis);
  23.         DataInputStream dis = new DataInputStream(bis);
  24.         System.out.println(dis.readInt());
  25.         System.out.println(dis.readLong());
  26.         System.out.println(dis.readChar());
  27.         System.out.println(dis.readUTF());
  28.         
  29.         // 先关闭最后的过滤流
  30.         dis.close();
  31.         bis.close();
  32.         fis.close();
  33.     }
  34. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2