1

我已经替换了许多字符串并输出了结果,现在正尝试将这些行写入文本文件。这就是我所做的。我创建了一个新文件:

File newfile = new File("/Users/Bill/Desktop/newfile.txt");
    if (newfile.exists()) {
        System.out.println("File exists");
    } else {
        newfile.createNewFile();
        System.out.println("New file created");

    }

然后我尝试将 System.out.println(lines[i]); 的结果写入创建的文件。

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }

不过,我没有得到我所期待的。有什么建议么?

写文件:

public class WriteToFile {
private String path;
private boolean append = false;

public WriteToFile(String filename) {
    path=filename;
}

public WriteToFile(String filename, boolean appendfile){
    path=filename;
    append=appendfile;
}

public void write(String text) throws IOException {
    FileWriter filewrite = new FileWriter(path, append);
    PrintWriter print = new PrintWriter(filewrite);

    print.printf("%s" + "%n", text);
    print.close();
}
}
4

3 回答 3

2

每次调用时WriteToFile.write,它都会重新打开文件进行写入,截断文件的原始内容。您应该在构造函数中打开文件一次(并将 存储在一个字段中) ,PrintWriter然后添加一个close调用close.PrintWriter

在调用方,执行以下操作:

WriteToFile writer = new WriteToFile(filename);
try {
    // writer.write(...);
} finally {
    writer.close();
}

通过close在块中调用,finally即使异常导致函数提前退出,也可以确保文件关闭。

于 2011-05-23T02:38:43.660 回答
0

FileWriter查看代码中构造函数的第二个参数。

FileWriter filewrite = new FileWriter(path, append);

看,它说“附加”。猜猜它的作用。如果您不确定,请阅读文档。

现在,看看你是如何初始化append.

private boolean append = false;

此代码的行为完全符合预期。这只是开发商的错。修理它 :)

于 2011-05-23T02:56:28.180 回答
0

只需使用 System.setOut(fileName);方法在 System 上设置 fileName

然后,每当我们想使用 System.out.println() 打印时,它都会直接打印到您提到的文件名。

于 2013-07-10T11:15:19.080 回答