黑马程序员技术交流社区
标题:
关于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