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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

朱志辉

初级黑马

  • 黑马币:0

  • 帖子:48

  • 精华:0

本帖最后由 朱志辉 于 2012-8-13 09:57 编辑

file.txt的文件内容为
abc
abc
  1. FileInputStream fis = new FileInputStream("file.txt");  // 创建输入流
  2.         

  3.         int count = 0;  // 定义一个变量,存储统计有多少个字符的结果

  4.         for (int b; (b = fis.read()) != -1; ) { // 读取一个字节,判断是否是文件末尾

  5.             System.out.println((char)b);    // 将字节转为字符显示

  6.             count++;    // 统计结果加1

  7.         }

  8.         System.out.println("--" + count + "--");    // 打印统计结果。

  9.         fis.close();    // 关闭流,释放资源
复制代码

打印结果是
  1. a
  2. b
  3. c



  4. a
  5. b
  6. c
  7. --8--
复制代码
第一行abc和第二行abc之间有4行间隔。
换行符不是\r\n吗?为什么会占据4行空间呢?求解释!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

13 个回复

正序浏览
本帖最后由 吴小东 于 2012-8-12 23:20 编辑


  1. <BLOCKQUOTE>public static void main(String[] args) throws IOException
  2. {
  3.   FileInputStream fis = new FileInputStream("C:\\IoDemo2.txt");
  4.   int number;
  5.   while ((number=fis.read())!=-1)
  6.   {
  7.    System.out.print((char)number); //这个能正常打印
  8.    /*
  9.    abc
  10.    abc
  11.    */
  12.    System.out.print((char)number + "^"); //加了一个符号在后面 a 消失了 神奇
  13.    /*
  14.    ^^b^c^
  15.    ^a^b^c^
  16.    */   
  17.   }
  18.   fis.close();
  19. }
复制代码
回复 使用道具 举报
一起学习嘛 呵呵,其实你这个题我还发现了一个问题,还没想通,我去找找代码。等下发上来
回复 使用道具 举报
本帖最后由 朱志辉 于 2012-8-12 18:11 编辑
  1. int count = 0;
  2. for (int b; (b = fis.read()) != -1; ) { // 读取一个字节,判断是否是文件末尾
  3. System.out.print("X<");
  4. System.out.println((char)b + ">"); // 将字节转为字符显示
  5. count++;
  6. System.out.print("|");
  7. }
  8. System.out.println("--" + count + "--");
复制代码
确 实是3个换行。为了让结果更加明了,我改了下代码,得出下图:

为什么会误认成3个换行呢?我想跟行距和空白字符混在一起的距离难以判断而引起视觉错误,而是回车那行输出有点奇怪
谢谢各位啊!谢谢吴小东!
回复 使用道具 举报
不要让你们的眼睛误导你啊
System.out.println("aaa");
System.out.println('\r');
System.out.println("aaa");
System.out.println('\n');
System.out.println("aaa");
继续上代码  你确定是4行
回复 使用道具 举报
吴小东 发表于 2012-8-12 16:14
\r不是换行, \n是换两次行  在加上你的一个 println 不是就是3个换行了吗?
System.out.println("\r");   ...

其实我是有输入四个空行的,但论坛系统保存时就变了。
回复 使用道具 举报
吴小东 发表于 2012-8-12 16:23
呵呵 习惯性的打双引号了,确实是个字符用单引号比较合适

:handshake '/r',和'/n'都是换行吧,应该是四个空行啊
回复 使用道具 举报
胡刚涛 发表于 2012-8-12 16:17
楼上的意思很明确,但是用 System.out.println('\r');和 System.out.println('\n');是不是比较好

...

:handshake 呵呵 习惯性的打双引号了,确实是个字符用单引号比较合适
回复 使用道具 举报
楼上的意思很明确,但是用 System.out.println('\r');和 System.out.println('\n');是不是比较好

回复 使用道具 举报
\r不是换行, \n是换两次行  在加上你的一个 println 不是就是3个换行了吗?
System.out.println("\r");  这里一次
System.out.println("\n"); 这里两次

加上不就是3个换行了吗 刚好与你的结果是相符合的。 你那里不是3个换行吗?

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
吴小东 发表于 2012-8-12 15:27
哥们你单独打印下面这两句代码你就知道为什么了
System.out.println("----");
System.out.println("\r");


\r也是换行?
回复 使用道具 举报
哥们你单独打印下面这两句代码你就知道为什么了
System.out.println("----");
System.out.println("\r");
System.out.println("\n");
System.out.println("----");
System.out.println()这句会换行, 但是打印里面的 \r 和 \n的时候 又换行了 所以会连着换两次行
回复 使用道具 举报
code_lover 发表于 2012-8-12 15:03
你的这个问题与代码无关,而是与你file.txt文件的内容有关。你的file.txt文件的内容应该为:abc  abc,两个 ...

文件内容没有空格,是”abc换行abc“
回复 使用道具 举报
你的这个问题与代码无关,而是与你file.txt文件的内容有关。你的file.txt文件的内容应该为:abc  abc,两个abc中间应该有两个空格的,所以最后统计的结果应该是8,如果中间是三个空格的话,统计的结果应该是9 ,所以呢上面统计的结果8和你的空格数应该是不相符合的。你可以尝试着在中间添加不同数目的空格来测试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马