黑马程序员技术交流社区

标题: 关于BufferedReader中readLine的问题 [打印本页]

作者: 够了没有    时间: 2013-11-20 15:46
标题: 关于BufferedReader中readLine的问题
根据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方法也是这样。为什么?


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

值得一提的是,读的时候自己加上了‘\’,但是输出写入文件就没了,还是正常的……
作者: 文涛    时间: 2013-11-20 17:02
楼主,你的这些\r\n之类的,写的是在txt中,在这里面换行和回车的表现形式是你真实看到的回车。就如你打下回车后看到的空行。
  在这里,你打的\r\n对于txt来说,这只是4个普通的字符,实际上跟换行的asc码并不对应,他们对应的是这四个字符对应的asc码。就像a对应97一样,txt实际上在用码表解析他们,而这里你打入的就是\r,这是已经解析过的
作者: ∏艾力克斯※    时间: 2013-11-20 17:19
楼上所言甚是,学习了




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