从文本文件中读取并尝试使用 printWriter 写入另一个文件会导致空白文件

Reading from a text file and attempting to use printWriter to write to another results in a blank file

我的作业如下:

to write a program that reads the attached text file and writes out a separate text file (using your first initial and last name as the filename). The new text file should contain all the same lines of text as the input file with the addition of a line number appended as the first character on the line.

Ex: if your input line reads:

this is a test

your output should read

  1. this is a test

我认为我写的主要是功能代码- 运行 它编译并创建一个要写入的新文件,但该文件是空白的(包含 0 个字节)。仔细阅读这个问题,我尝试确保我的 printWriter 和 input/output 流是 closed/flushed。我现在不确定我的循环是否有问题,或者我是否在错误的地方调用了 close 方法。感谢任何帮助。

代码如下:

package module6lecture;

import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ReadWriteProgram {

public static void main(String[] args) {
    try
    {
        FileInputStream fis = new FileInputStream("C:\Users\Reid\Desktop\Chapter11.txt");
        FileOutputStream fos = new FileOutputStream("C:\Users\Reid\Desktop\rulicny.txt");
        Scanner scan = new Scanner(fis);
        PrintWriter pw = new PrintWriter(fos);
        int lineNumber = 1;
        while(scan.hasNextLine());
        {
            String stringRead = scan.nextLine();
            pw.println(lineNumber + ": " + stringRead);
            lineNumber++;
        }
        pw.close();
    }
    catch(FileNotFoundException fnf)
    {
        System.out.println("Unable to find Chapter11.txt. Exiting...");
        fnf.printStackTrace();
    }
}
}

免责声明:我是一个新手。

尝试在循环外预定义 String stringRead

while 循环后面有分号

while(scan.hasNextLine());
//                       ^

这使它成为无限循环,因为它代表空指令,就像

while(scan.hasNextLine()){}

所以你实际上并没有进入

{
    String stringRead = scan.nextLine();
    pw.println(lineNumber + ": " + stringRead);
    lineNumber++;
}

块,以及在它之后的代码,这意味着您没有向结果文件写入任何内容,甚至没有关闭它。如果使用

创建空文件,则您拥有的一切
FileOutputStream fos = new FileOutputStream("C:\Users\Reid\Desktop\rulicny.txt");

所以去掉这个分号。


顺便说一句,如果您愿意为您设置 IDE 格式代码,您可以轻松发现此类错误。 Eclipse 将您的示例格式化为

while (scan.hasNextLine())
    ;
{
    String stringRead = scan.nextLine();
    pw.println(lineNumber + ": " + stringRead);
    lineNumber++;
}

如您所见,这很好地表明您的循环实际上执行的是空语句而不是代码块。