Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileWriter没有';即使在.flush()/.close()之后也不能写入文件_Java_Filewriter - Fatal编程技术网

Java FileWriter没有';即使在.flush()/.close()之后也不能写入文件

Java FileWriter没有';即使在.flush()/.close()之后也不能写入文件,java,filewriter,Java,Filewriter,我试图写入一个文本文件,但即使该方法创建的文件不存在,它也不会写入。我已经通过了其他几个类似问题的帖子,并遵循了建议,但没有运气 通过使用调试器,字符串数据包含应写入但从未写入文本文件的正确数据 任何关于我忽略的事情的建议都将不胜感激 private static void createReservation(String filmName, String date, int noOfSeats, String username) { FileWriter fw = null;

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

通过使用调试器,字符串数据包含应写入但从未写入文本文件的正确数据

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

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);
        }
    }
}
private static void createReservation(字符串filmName、字符串date、int noofseat、字符串username){
FileWriter fw=null;
试一试{
File bookingFile=新文件(“C:\\server\\bookininfo.txt”);
如果(!bookingFile.exists())
{
bookingFile.createNewFile();
}
fw=newfilewriter(bookingFile.getName(),true);
字符串数据=“\r\n”;
写入(数据);
fw.flush();
}捕获(IOEX异常){
Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE,null,ex);
}最后{
试一试{
fw.close();
}捕获(IOEX异常){
Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE,null,ex);
}
}
}

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

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

只需使用接受
文件的构造函数

fw = new FileWriter(bookingFile, true);
还要注意,您不需要首先调用
createNewFile()
,如果文件不存在,则
FileWriter
构造函数将创建该文件

顺便说一句,我个人并不喜欢
FileWriter
——它总是使用平台默认编码。我建议使用
FileOutputStream
包装在
OutputStreamWriter
中,您可以在其中指定编码。或者使用帮助器方法,使所有这些都变得更简单。例如:

Files.append(bookingFile, data, Charsets.UTF_8);
用这个

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

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

您在日志中是否看到任何异常?你肯定能写入那个文件吗?根本不会抛出异常。我不太确定如何判断我是否可以写入该文件,但在我项目的另一个区域,该程序创建并写入位于同一目录中的两个单独的XML文件。这非常有效。Java新手,所以我自己看不到这一点。谢谢。