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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 够了没有 中级黑马   /  2013-11-20 15:46  /  1479 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

根据BufferedReader中方法readLine的描述:“通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。“
为什么我通过代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class IO流 {
        public static void main(String[] args) throws IOException{
                FileReader fr = new FileReader("Demo.txt");
                BufferedReader bufr = new BufferedReader(fr);
                FileWriter fw = new FileWriter("DemoCopy.txt");
                BufferedWriter bufw = new BufferedWriter(fw);
                String str = null;
                while((str = bufr.readLine())!=null){
                        bufw.write(str);
                        bufw.newLine();
                        bufw.flush();
                }
                bufr.close();
                bufw.close();
        }
}
复制内容为:
abcde1

abc\r\nde2
abcde3
abcde4
的文本时,复制得到的文本是这样的:
abcde1

abc\r\nde2
abcde3
abcde4
而不是这样的:
abcde1

abc
de2
abcde3
abcde4
----------------------------------------------------------------------------------------------------
原文本中不是有\r\n吗?为什么readLine读到了不换行?而且通过自定义的myReaderLine方法也是这样。为什么?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
我们来用调试来看看这个过程:
当逐行读取源文件中的内容时,包含/r/n等特殊关键字的字符,统统都被加上了'/',变成了'//r//n'
比方说,你例子中的“abc\r\nde2” 就变成了 "abc\\r\\ned2",转义符起了作用,所以不会出问题。

值得一提的是,读的时候自己加上了‘\’,但是输出写入文件就没了,还是正常的……
回复 使用道具 举报
楼主,你的这些\r\n之类的,写的是在txt中,在这里面换行和回车的表现形式是你真实看到的回车。就如你打下回车后看到的空行。
  在这里,你打的\r\n对于txt来说,这只是4个普通的字符,实际上跟换行的asc码并不对应,他们对应的是这四个字符对应的asc码。就像a对应97一样,txt实际上在用码表解析他们,而这里你打入的就是\r,这是已经解析过的
回复 使用道具 举报
楼上所言甚是,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马