java – 即使在.flush()/.close()之后,FileWriter也不会写入文件

我试图写入一个文本文件,但即使该方法创建该文件,如果它不存在,它不会写.我已经通过其他几个有类似问题的帖子,并按照建议但没有运气.

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

关于我忽略的事情的任何建议将不胜感激.

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

解决方法:

知道了 – 这就是问题所在:

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

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

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

fw = new FileWriter(bookingFile, true);

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

另外,我个人不是FileWriter的粉丝 – 它总是使用平台默认编码.我建议使用包装在OutputStreamWriter中的FileOutputStream,您可以在其中指定编码.或者使用Guava辅助方法,这使得所有这些都更简单.例如:

Files.append(bookingFile, data, Charsets.UTF_8);
上一篇:java – 将输出数据写入文本文件会在文本文件中产生不完整的结果


下一篇:java.io.FileWriter是否仅为一次性使用而设计?