try{
FileInputStream fileInput=new FileInputStream(args[0]);
int data=fileInput.read();
int number=fileInput.available();
System.out.println(number);
while(data!=-1){
System.out.write(data);
data=fileInput.read();
}
    //System.out.println("");
fileInput.close();
}
catch(IOException ioe){
System.err.println("Error"+ioe);
}
以上是程序。。
       问题是每次读出文件内容的时候会读掉最后一行的内容,我想知道是为什么?另外我在输出内容的While循环后面加上任意一个输出(如注释中的),文件的最后一行又可以正常输出,是怎么回事?

解决方案 »

  1.   

    if ((b == '\n') && autoFlush)
    out.flush();
    }
    ---
    上面是PrintStream中write(int b)中部分代码(System.out instanceof PrintStream = true)
    可以看出当遇到\n才会将缓冲区的内容输出
    读到最后一行的最后没有\n当然就不会输出了
    可以在读完后调用System.out.flust()输出缓冲区里的内容
      

  2.   

    为什么用System.out.write()呢?你想做什么?我用System.out.print()没有问题,因为print()会把内容转成字符串输出,否则什么也看不到另外,out的类型是PrintWriter,是有缓存的,write()是把字节写到流里了,这时写的是二进制,输出来也看不到,循环后加System.out.println("");加上前面的二进制,就都转成字符串了,所以看到了
      

  3.   

    tnnd我前几天也碰到这个问题了...学习..
      

  4.   

    System.out.write有缓冲,可以加个System.out.flush();
      

  5.   

    建议用BufferedReader封装一下输入流,用readLine方法读取数据。
      

  6.   

    感谢顶楼的达人。。我查了一下,确实是这个问题。。
    但是不知道是IE出了问题,还是CSDN,给分的时候提示说网页有错。。
    等好了一定把分补上!