黑马程序员技术交流社区
标题:
关于BufferedReader中方法readLine的问题?
[打印本页]
作者:
够了没有
时间:
2013-11-19 16:50
标题:
关于BufferedReader中方法readLine的问题?
本帖最后由 够了没有 于 2013-11-20 15:53 编辑
根据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-19 17:41
\r和\n是转义字符,如果你要向控制台输出\n,那么你应该写成System.out.println("\\n");
因为\是一个转义字符,\n会被转义成换行,如果你希望\作为普通字符出现,那么就应该对其转义以\\代替。
Scanner input = new Scanner(System.in);
System.out.println("输入的是:"+input.next());
运行结果截图
在这里\n其实是两个字符'\'和'n',是普通字符,而转义字符'\n'是一个字符
从Java程序与文本文件也是这样的,文本文件中的\n其实是两个,在控制台输出当然是两个字符\n,而向文本文件中写入字符串"\r\n",注意这里是两个字符'\r'和'\n',在windows系统中字符'\r'和'\n'会被解释成换行
QQ截图20131119173404.png
(755 Bytes, 下载次数: 7)
下载附件
2013-11-19 17:34 上传
作者:
简★零度
时间:
2013-11-19 18:12
我是这么理解的,读文本文件时,每行结尾都有回车,windows中回车是'\r''\n'两个字符,读到'\r’时就无视他,读到'\n'时把存在StringBuffer里的字符串返回,而'\r''\n'都没在字符串中。
你建个txt文件,自己用realLine()读一下,就知道,所有文字挤在一行
所以BufferedWriter 中会有一个newLine()方法,就是用来换行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2