Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Scanner.hasNextLine()不';你没发现空行吗?_Java - Fatal编程技术网

Java Scanner.hasNextLine()不';你没发现空行吗?

Java Scanner.hasNextLine()不';你没发现空行吗?,java,Java,假设我有以下文件 Hej Hej Hej A A A A 在a的线后面有一个断线 我的问题是代码 while (in.hasNextLine()) { String line = in.nextLine(); if (in.hasNextLine()) { out.println(line); } else { out.print(line); } } 在.hasNextLine()中未检测到此额外行,因此我错过了输出文

假设我有以下文件

Hej Hej Hej
A A A A
在a的线后面有一个断线

我的问题是代码

while (in.hasNextLine()) {
    String line = in.nextLine();
    if (in.hasNextLine()) {
        out.println(line);
    }
    else {
        out.print(line);
    }
}

在.hasNextLine()中未检测到此额外行,因此我错过了输出文件中的换行符(我正在执行文件连接程序)。问题可能是什么?

调用
.hasNextLine()
两次,而只读取一次“下一行”

您的代码应该是:

while (in.hasNextLine()) {
    String line = in.nextLine();        
    out.println(line);            
}
或者,如果您想再次检查循环中是否存在下一行,您应该这样做(我发现这不够干净,因为它与上面的代码片段完全相同):


调用
.hasNextLine()
两次,而只读取一次“下一行”

您的代码应该是:

while (in.hasNextLine()) {
    String line = in.nextLine();        
    out.println(line);            
}
或者,如果您想再次检查循环中是否存在下一行,您应该这样做(我发现这不够干净,因为它与上面的代码片段完全相同):

Scanner.getLine()
读取当前行上的所有字符,包括行终止符(如果有),然后丢弃行终止符。使用此方法,无法知道文件是否以行终止符结尾

如果您正在编写文件连接程序,为什么要逐行读取?这样做可能导致数据丢失;例如,输出文件将使用平台默认的行终止符(例如“\r\n”或“\n”),而不管输入文件使用的是哪一行终止符

以字节流的形式读写文件更有意义,例如使用
InputStream.read(byte[])
。更好的方法是使用
java.nio.file.Files.copy(Path-source,OutputStream-out)
,它是Java7中新引入的,可以为您完成所有的艰苦工作

但是,需要注意的是,如果要连接的文件是具有不同字符编码的文本文件,则需要将它们转换为在输出文件中使用相同编码的所有文件。在这种情况下,请使用
文件读取器和写入程序。

Scanner.getLine()
读取当前行上的所有字符,包括行终止符(如果有),然后丢弃行终止符。使用此方法,无法知道文件是否以行终止符结尾

如果您正在编写文件连接程序,为什么要逐行读取?这样做可能导致数据丢失;例如,输出文件将使用平台默认的行终止符(例如“\r\n”或“\n”),而不管输入文件使用的是哪一行终止符

以字节流的形式读写文件更有意义,例如使用
InputStream.read(byte[])
。更好的方法是使用
java.nio.file.Files.copy(Path-source,OutputStream-out)
,它是Java7中新引入的,可以为您完成所有的艰苦工作


但是,需要注意的是,如果要连接的文件是具有不同字符编码的文本文件,则需要将它们转换为在输出文件中使用相同编码的所有文件。在这种情况下,请使用
文件读取器
和写入器。

输出。打印
应该是第一个代码段中的
输出。打印ln
。这不会区分以换行结尾的文件和最后一行未终止的文件。我想这就是OP想要做的。@KlitosKyriacou是的,这就是我想要做的。
out.print
应该是
out.println
,在你的第一个代码片段中。这并不区分以换行结束的文件和最后一行未终止的文件。我想这就是OP想要做的。@KlitosKyriacou是的,这就是我想要做的