Java FileWriter未写入文件

Java FileWriter未写入文件,java,json,filewriter,is-empty,Java,Json,Filewriter,Is Empty,我正在创建一个应用程序,它需要为每个用户编写一个文件(JSON格式) 应用程序已成功创建该文件,但该文件为空。在代码中,我添加了一个更精细的输出,以查看转换后的JSON字符串的外观,我注意到它是完整的(它包含所有内容,因此转换是正常的)。但该字符串不在文件中 //create a new FileWriter C:/.../42.guser FileWriter writer = null; //for every User for(int i=

我正在创建一个应用程序,它需要为每个用户编写一个文件(JSON格式)

应用程序已成功创建该文件,但该文件为空。在代码中,我添加了一个更精细的输出,以查看转换后的JSON字符串的外观,我注意到它是完整的(它包含所有内容,因此转换是正常的)。但该字符串不在文件中

//create a new FileWriter C:/.../42.guser
        FileWriter writer = null;

        //for every User
        for(int i=0; i<users.size(); i++) {

            try {
                File f = new File(Users.usersDir.getPath()+"/"+i+".guser");

                //Create new file
                f.createNewFile();

                writer = new FileWriter(f);

                //convert to json and write to file. Here we get the object with KEY = keys[i].
                String stringedUsr = gson.toJson(users.get(keys[i]));

                logger.finer("Converted user: \""+stringedUsr+"\""); //Output seems ok

                //Write (NOT WORKING)
                writer.write(stringedUsr);

                logger.fine("Wrote updated user \""+keys[i]+"\" to file "+f.getCanonicalPath());

            } catch (IOException e) {
                FAILS++;
                e.printStackTrace();
            }

        }
        //End of for
//创建一个新的FileWriter C://…/42.guser
FileWriter=null;
//对于每个用户

对于(inti=0;i首先考虑关闭您的编写器。 关闭时,它应该先
flush()
您的数据(如文档中所述)


您也可以手动
flush()

首先考虑关闭您的编写器。 关闭时,它应该先
flush()
您的数据(如文档中所述)


您也可以手动
flush()

尝试
flush()
方法,也可以在完成时关闭writer只要关闭它就可以了。这将刷新。@AxelMontini否,因为它不会调用flush或close;-)整个重新分配业务都是一种代码味道。为什么不在使用它的块内部声明
writer
,并在声明时分配它呢?始终保持变量范围尽可能小。(当然,仅此一点对您没有帮助,您需要
最终关闭)。请尝试
flush()
方法,并在完成时关闭writer只要关闭它就可以了。这将刷新。@AxelMontini否,因为它不会调用flush或close;-)整个重新分配业务都是一种代码气味。为什么不在使用它的块内部声明
writer
,并在声明时分配它呢?始终保持变量范围尽可能小。(当然,单凭这一点是帮不了你的,你需要
最后关闭)。