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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨增坤 金牌黑马   /  2013-10-1 11:54  /  1367 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-10-1 16:17 编辑
  1. import java.io.FileReader;
  2. import java.io.IOException;

  3. public class MyBufferedReader {
  4.         private FileReader fr = null;

  5.         public MyBufferedReader(FileReader fr) {
  6.                 super();
  7.                 this.fr = fr;
  8.         }

  9.         /* 模拟readLine的话,其实里面封装了一个数组,我们为了方便,就封装StringBuilder对象,这样操作方便 */

  10.         public String readLine() throws IOException {
  11.                 StringBuilder sb = new StringBuilder();
  12.                 int ch = -1;
  13.                 while ((ch = fr.read()) != -1) {
  14.                         //System.out.print(ch+",");  从输入的个数判断出
  15.                         if (ch == '\r')//当文件中就存在\r,那此时是否存入StringBuilder中呢,开始我认为是不会存入的,但是结果输出了,难道是读取的时候例如:\r,把\ 和 r分开读取了,这样理解的话,就通顺了
  16.                                 continue;
  17.                         if (ch == '\n')//这里和\r的疑问和理解一样
  18.                                 return sb.toString();
  19.                         else
  20.                                 sb.append((char) ch);

  21.                 }
  22.                 if (sb.length() != 0)// 这里解决了,最后一样没有回车,防止最后一行不被输出
  23.                         return sb.toString();
  24.                 return null;
  25.         }

  26.         public void close() throws IOException {
  27.                 if (fr != null) {
  28.                         fr.close();
  29.                 }
  30.         }
  31. }
复制代码
假如文件中存在\r或则\n,那么结果会输出吗?我的理解正确吗??是不是每行都有默认的(在window上的)\r\n,自己输出的会分开读取,是不是可以这样理解???

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

6 个回复

倒序浏览
'\r'这是一个字符,怎么拆呢,readLine(),返回的字符串中是没有换行功能的
我是这么理解的,读文本文件时,每行结尾都有回车,windows中回车是'\r''\n'两个字符,读到'\r’时就无视他,读到'\n'时把存在StringBuffer里的字符串返回,而'\r''\n'都没在字符串中。
你建个txt文件,自己用realLine()读一下,就知道,所有文字挤在一行
所以BufferedWriter 中会有一个newLine()方法,就是用来换行

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
我知道你什么意思了,这里的'\r'都是一个字符,
而文本中的 \r 是'\' 'r',两个字符,你在文本中怎么输入一个字符的'\r'
这个我之前也困惑过

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
文件中的'\r'其实是两个字节,而系统中换行标记'\r'是一个字节,并且是隐式的,不会显示出来,但会占用字节空间,当系统读取到默认的'\r',会执行换行操作,文本中的'\r',会当做字符来处理;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
在记事本中输入“\r”------->'\'+'r';
在记事本中敲回车--------->'\r'.    (\n和\r一个道理,略)

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
  \是转义符,读到它,编译器就会去度下一个字符,看看是转义成什么。\r\n 是4个字符,但是在一起就是换行的意思
回复 使用道具 举报
文本中输入不了一个字符\n,但是可以通过写入流向文本写入一个字符\n,但是在文本中是不会换行,必须前面加上\r,在Java读取流中,通常文本中的转义字符是不会被读取的,,即使通过写入流写入\r\n也,读取也不会出现换行符。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马