假设我有以下文件
Hej Hej Hej
A A A A
在A&A之后的换行符。
我的问题是代码
while (in.hasNextLine()) {
String line = in.nextLine();
if (in.hasNextLine()) {
out.println(line);
}
else {
out.print(line);
}
}
在in.hasNextLine()
中没有检测到这个额外的行,所以我错过了输出文件中的换行符(我正在做一个文件串联程序)。问题是什么?
答案 0 :(得分:5)
当您正在阅读"下一行"时,您需要两次调用.hasNextLine()
只有一次。
您的代码应该是:
while (in.hasNextLine()) {
String line = in.nextLine();
out.println(line);
}
或者,如果你想在循环中再次检查下一行,你应该这样做(我发现它不够干净,因为它与上面的代码片完全一样):
while (in.hasNextLine()) {
String line = in.nextLine();
if (in.hasNextLine()) {
String nextLine = in.nextLine();
out.println(line);
} else {
out.print(line);
}
}
答案 1 :(得分:0)
Scanner.getLine()
读取当前行上的所有字符,包括行终止符(如果有的话),然后丢弃行终止符。使用此方法,无法知道文件是否以行终止符结束。
如果您正在编写文件串联程序,为什么要逐行阅读?这样做可能会导致数据丢失;例如,您的输出文件将使用平台默认行终止符(例如“\ r \ n”或“\ n”),而不管您的输入文件使用哪个行终止符。
将文件作为字节流读取和写入更有意义,例如使用InputStream.read(byte[])
。更好的是,使用Java 7中新引入的java.nio.file.Files.copy(Path source, OutputStream out)
并为您完成所有艰苦工作。
FileReader
和Writer。