【发布时间】:2016-04-12 19:14:35
【问题描述】:
我有一个缓冲阅读器流式传输文件。目前有两种情况:
它正在流式传输在一台 PC 上生成的文件,我们称之为 File1。 它正在流式传输在另一台计算机上生成的文件,我们称之为 File2。
我假设我的问题是由 EOL 引起的。
BufferedReader 确实读取了这两个文件,但对于 File2,它会为每个新行读取一个额外的空行。
此外,当我使用line.equalsIgnoreCase("abc") 比较该行时,假设该行是"abc" 它不会返回true。
将此代码与两个链接中提供的两个文件一起使用以复制问题:
public class JavaApplication {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
File file = new File("C:/Users/User/Downloads/html (2).htm");
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String line = "";
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
注意第二个文件如何在每行之后打印一个空行...
我一直在寻找和尝试,寻找和尝试,但无法提出解决方案。
任何想法如何解决这个问题? (尤其是比较的东西?)
【问题讨论】:
-
我认为
\r, CR, 0x0d 和\n, LF, 0x0a 之间存在混淆。因为如果行以\n\r结尾,BufferedReader 会识别两行:以\n= Unix 风格和\r= 旧Mac 风格结束,而\r\n将是Windows 风格。 -
好吧,如果
\r\n让它每隔一行读取一个空行会更有意义,但它是\r这样做......我用这个答案来找出分隔符,也许它也不是功能齐全^^ stackoverflow.com/a/13828045/3653975 -
@JoopEggen 有什么问题?更新了答案以显示我用来获取新行的代码,以及比较行...非常感谢帮助
-
你可以试试
line = line.replaceAll("\r\n","\n"); -
第一个显示 UTF-8,另一个显示 UTF-16。 UTF-16 错误地读取为 ASCII 的 UTF-8,在每个字节 (char) 之后包含一个 nul 字节 (char)。 这就是解决方案。在HTML中也是这样指定的,charset=...
标签: java bufferedreader