为什么 BufferedWriter 不会将 URL 内容写入文本文件?

Why won't BufferedWriter write URL content to text file?

我正在尝试将 URL 中的文本以 35 行为一组写入文本文件,按回车键继续下一批 35 行。如果我不尝试以 35 行为一组写入文件,它会很好地工作并将所有内容写入文本文件。但是当我尝试使用 if 语句以 35 为一组打印时,除非我按 enter 大约 15 次,否则它不会打印到文件中。即便如此,它也不会打印所有内容。我好像跟 if 语句有关,但我想不通。

String urlString = "https://www.gutenberg.org/files/46768/46768-0.txt";

    try {
        URL url = new URL(urlString);
        try(Scanner input = new Scanner(System.in);
            InputStream stream = url.openStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
            BufferedWriter writer = new BufferedWriter(new FileWriter("C:\Users\mattj\Documents\JuliusCeasar.txt"));) {

            String line;
            int PAGE_LENGTH = 35;
            int lineCount = 0;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
                writer.write(line + "\n");
                lineCount++;
                if (lineCount == PAGE_LENGTH){
                    System.out.println();
                    System.out.println("- - - Press enter to continue - - -");
                    input.nextLine();
                    lineCount = 0;
                }
            }
        }
    } catch (MalformedURLException e) {
        System.out.println("We encountered a problem regarding the following URL:\n"
                + urlString + "\nEither no legal protocol could be found or the "
                + "string could not be parsed.");
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("Attempting to open a stream from the following URL:\n"
                + urlString + "\ncaused a problem.");
        e.printStackTrace();
    }

我不知道 Java,但是 .NET 中有非常相似的概念。我认为这里有几件事需要考虑。

BufferWriter 不会立即写入文件,顾名思义,它充当缓冲区,随着时间的推移收集写入请求,然后分批执行。 BufferWriter 有一个 flush 方法可以立即刷新 'queued' 写入文件 - 所以我会在你达到 35 时执行此操作(永远不会在每次写入时刷新)。

此外,BufferedReaderBufferedWriter 是可关闭的,因此请确保将它们包装在 try 语句中以确保资源正确 unlocked/cleared.