5

我正在尝试写入文本文件,但即使该方法创建该文件(如果它不存在),它也不会写入。我已经通过其他几个类似问题的帖子并遵循了建议但没有运气。

通过使用调试器,字符串数据包含应该写入的正确数据,但它永远不会写入文本文件。

任何我忽略的东西的建议将不胜感激。

private static void createReservation(String filmName, String date, int noOfSeats, String username) {
    FileWriter fw = null;
    try {
        File bookingFile = new File("C:\\server\\bookinginfo.txt");
        if (!bookingFile.exists())
        {
            bookingFile.createNewFile();
        }
        fw = new FileWriter(bookingFile.getName(),true);
        String data = "<"+filmName+"><"+date+"><"+Integer.toString(noOfSeats)+"><"+username+">\r\n";
        fw.write(data);
        fw.flush();
    } catch (IOException ex) {
        Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            fw.close();
        } catch (IOException ex) {
            Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
4

2 回答 2

18

明白了——这就是问题所在:

new FileWriter(bookingFile.getName(),true);

getName()方法将只返回bookinginfo.txt,这意味着它将创建一个bookinginfo.txt在当前工作目录中调用的文件。

只需使用带有 a 的构造函数File

fw = new FileWriter(bookingFile, true);

另请注意,您不需要先调用createNewFile()-FileWriter如果文件不存在,构造函数将创建该文件。

顺便说一句,我个人不喜欢FileWriter- 它总是使用平台默认编码。我建议在可以指定编码FileOutputStream的地方使用 Wrapped 。OutputStreamWriter或者使用Guava辅助方法,使这一切变得更加简单。例如:

Files.append(bookingFile, data, Charsets.UTF_8);
于 2013-04-06T17:10:50.827 回答
1

用这个

fw = new FileWriter(bookingFile.getAbsolutePath(),true);

代替

fw = new FileWriter(bookingFile.getName(),true);
于 2013-04-06T17:15:40.487 回答