黑马程序员技术交流社区

标题: 莫名其妙出现换行?IO问题 [打印本页]

作者: 于潇    时间: 2012-5-18 17:55
标题: 莫名其妙出现换行?IO问题
  1. import java.io.*;
  2. public class InputStreamDemo{
  3. public static void main(String args[]) throws Exception{
  4. File f= new File("d:" + File.separator + "test.txt") ;
  5. InputStream input = null ;
  6. input = new FileInputStream(f) ;
  7. byte b[] = new byte[1024] ;
  8. input.read(b) ;
  9. input.close() ;
  10. System.out.println("内容为:" + new String(b)) ;
  11. }
  12. }
复制代码
这套代码执行了一下
test.txt文件内容为



运行代码的时候却出现了换行。。。。还是空格……

这是为什么呢?
作者: 许涛    时间: 2012-5-18 18:15
本帖最后由 许涛 于 2012-5-18 18:20 编辑

因为你定义的是一个固定的1024数组,所以有会出现空格,定义循环,取到标记结束位置就没问题了
  1. import java.io.*;
  2. public class Test//InputStreamDemo
  3. {
  4.         public static void main(String args[]) throws Exception
  5.         {
  6.                 File f= new File("d:" + File.separator + "test.txt") ;

  7.                 InputStream input = null ;

  8.                 input = new FileInputStream(f) ;

  9.                 byte b[] = new byte[1024] ;

  10.                 int len = 0;

  11.                 while((len=input.read(b))!=-1)
  12.                 {
  13.                         System.out.println("内容为:" + new String(b,0,len)) ;
  14.                 }
  15.                 //input.read(b) ;
  16.                 input.close() ;
  17.         }
  18. }
复制代码

作者: 田林    时间: 2012-5-18 18:27
本帖最后由 田林 于 2012-5-18 18:29 编辑

这是因为你一次输出了1024个字节!而实际应该输出的字节为读入字节的长度。可以这样该:
08.input.read(b) ;  ---->  int a=input.read(b);
10.System.out.println("内容为:" + new String(b)) ; ---->System.out.println("内容为:" + new String(b,0,a));
不过上面这种方法只能读取一次,建议使用循环语句:
int num=0;
        while((num=input.read(b))!=-1){
        System.out.println("内容为:"+new String(b,0,num));
        }

这样更严谨一些!
作者: 孙宇晨    时间: 2012-5-18 20:16
首先定义一个 int 类型的变量 num是用来接收read方法返回值
int num=0; 初始值为0

用while循环判断文件读取结束后就不再读取
判断条件是num也就是read方法返回值不等于-1,因为如果数据读取完毕 read方法会返回-1值
while((num=input.read(b))!=-1){
        System.out.println("内容为:"+new String(b,0,num));
        }

作者: 8161776    时间: 2012-5-19 08:45
  int len = 0;//定义一个变量来储存你读了多少个字节

while((len=input.read(b))!=-1){
         System.out.println("内容为:" + new String(b,0,len)) ;//那个byte数组里有多少内容就打印多少
}




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