为什么 Scanner 对象会影响 BufferedWriter 写入文件的能力?
Why is the Scanner object affecting the BufferedWriter's ability to write to a file?
我正在尝试读取给定 URL 的文本内容,然后打印内容,并使用 BufferedWriter 将其写入文本文件。我需要包含一个代码块,该代码块一次只允许打印 35 行文本,直到用户使用 Scanner 实例按下回车键,但立即写入整个文本文件。所有这些都必须在 try-with-resource 块中完成。这是我的代码:
try(InputStream stream = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))){
Scanner input = new Scanner(System.in);
String newLine;
int PAGE_LENGTH = 1;
while(((newLine = reader.readLine()) != null)) {
writer.write(newLine + "\n");
//writer.flush();
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
PAGE_LENGTH++;
}
}
writer.close();
}
在实施 35 行限制之前,作者正确地编写了一个文本文件。我试过在循环中加入writer.flush();
,结果只写了35行,所以我知道问题一触发'if'语句就出现了(肯定要写几百行文字) .我注意到,如果我注释掉 input.nextLine();
,作者会再次运行。
Scanner 实例如何阻止 BufferedWriter 写入文本文件?我没有考虑什么?任何 help/feedback 将不胜感激!
How is the Scanner instance preventing BufferedWriter from writing the text file?
好吧,那我就说那只是因为input.nextLine
阻塞了你的程序,让你有时间打开文件看看有没有什么写了。
如果您不 flush
,在缓冲区满之前 实际上 不会写入任何内容(并且您的文本文件的 35 行没有填满缓冲区显然),或者直到您关闭文件。这是 缓冲 写入器的主要特征,与非缓冲写入器相对。
有没有扫描仪并不重要。只是如果没有扫描仪,程序运行速度太快,你只能在文件关闭后才能查看,此时所有内容都已写入其中。
另外,无论if语句执行到哪个分支,都应该递增PAGE_LENGTH
,否则会一直命中“if”分支,等你回车,一次PAGE_LENGTH
达到 35.
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
}
// move this outside of the if statement!
PAGE_LENGTH++;
我正在尝试读取给定 URL 的文本内容,然后打印内容,并使用 BufferedWriter 将其写入文本文件。我需要包含一个代码块,该代码块一次只允许打印 35 行文本,直到用户使用 Scanner 实例按下回车键,但立即写入整个文本文件。所有这些都必须在 try-with-resource 块中完成。这是我的代码:
try(InputStream stream = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))){
Scanner input = new Scanner(System.in);
String newLine;
int PAGE_LENGTH = 1;
while(((newLine = reader.readLine()) != null)) {
writer.write(newLine + "\n");
//writer.flush();
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
PAGE_LENGTH++;
}
}
writer.close();
}
在实施 35 行限制之前,作者正确地编写了一个文本文件。我试过在循环中加入writer.flush();
,结果只写了35行,所以我知道问题一触发'if'语句就出现了(肯定要写几百行文字) .我注意到,如果我注释掉 input.nextLine();
,作者会再次运行。
Scanner 实例如何阻止 BufferedWriter 写入文本文件?我没有考虑什么?任何 help/feedback 将不胜感激!
How is the Scanner instance preventing BufferedWriter from writing the text file?
好吧,那我就说那只是因为input.nextLine
阻塞了你的程序,让你有时间打开文件看看有没有什么写了。
如果您不 flush
,在缓冲区满之前 实际上 不会写入任何内容(并且您的文本文件的 35 行没有填满缓冲区显然),或者直到您关闭文件。这是 缓冲 写入器的主要特征,与非缓冲写入器相对。
有没有扫描仪并不重要。只是如果没有扫描仪,程序运行速度太快,你只能在文件关闭后才能查看,此时所有内容都已写入其中。
另外,无论if语句执行到哪个分支,都应该递增PAGE_LENGTH
,否则会一直命中“if”分支,等你回车,一次PAGE_LENGTH
达到 35.
if(PAGE_LENGTH % 35 == 0) {
System.out.println("\n- - - Press Enter to Continue - - -");
input.nextLine();
}
else {
System.out.println(newLine);
}
// move this outside of the if statement!
PAGE_LENGTH++;