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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于潇 中级黑马   /  2012-5-18 17:55  /  1756 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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文件内容为



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

这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 许涛 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 田林 于 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));
        }

这样更严谨一些!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
首先定义一个 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));
        }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
  int len = 0;//定义一个变量来储存你读了多少个字节

while((len=input.read(b))!=-1){
         System.out.println("内容为:" + new String(b,0,len)) ;//那个byte数组里有多少内容就打印多少
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马