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

时间:2015-04-05 22:26:42

标签: java io printwriter

我的任务如下:

  

编写一个程序,读取附加的文本文件并写出一个单独的文本文件(使用您的第一个名字和姓氏作为文件名)。新文本文件应包含与输入文件相同的所有文本行,并添加行号作为行上的第一个字符。

     

例如:如果您的输入行显示:

     

这是一个测试

     

你的输出应该是

     
      
  1. 这是一个测试
  2.   

我写过我认为主要是功能代码 - 在运行它时编译并创建一个要写入的新文件,但该文件为空(包含0个字节)。阅读问题,我尝试确保我的printWriter和输入/输出流已关闭/刷新。我现在还不确定我的循环是否有问题,或者我是否在错误的位置调用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();
    }
}
}

免责声明:我是新手。

2 个答案:

答案 0 :(得分:1)

循环后有分号

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++;
}

如你所见,你的循环实际上执行空语句而不是代码块是非常好的。

答案 1 :(得分:0)

尝试在循环之外预定义String stringRead