我有旧代码,它使用 BufferedWriter 在文件系统中创建文件。
问题是,当程序中出现一些验证错误时,它会创建一个空文件。 当存在验证错误时,它根本不应该创建该文件,但只有在向其中写入数据(验证)时才会检测到错误。 PFB示例代码:
//Legacy code
File file1= new File(<path to directory>);
BufferedWriter dBufferedWriter = new BufferedWriter(new FileWriter(file1));
//Code that can have error and this repeats in loop
String str = "some string or null if error occurs";
if(validate(str)){
dBufferedWriter.write(str);
}
//Later at end
dBufferedWriter.close();
有没有办法在不需要时延迟创建文件?
最佳答案
当您创建新的FileWriter
时,如果该文件不存在,它将创建新文件。如果发生异常不需要任何文件,可以使用try{...}finally{...}
:
File file = new File(<path to directory>);
BufferedWriter dBufferedWriter = new BufferedWriter(new FileWriter(file));
try{
// some code where you can get exception
String str = "some string or null if error occurs";
dBufferedWriter.write(str);
}finally{
dBufferedWriter.close();
if(file.length()==0) file.delete();
}
顺便说一句,即使您不需要检查文件长度,使用 finally
来关闭资源也是一个很好的做法。
当然,如果您可以更改旧代码的顺序,请确保在验证代码之后创建文件。如果验证后出现异常代码,循环将无法到达:
// some code where you can get exception
Writer fileWriter = new FileWriter(new File(<path to directory>));
String str = "some string or null if error occurs";
dBufferedWriter.write(str);
dBufferedWriter.close();
关于Java I/O 延迟在文件系统中创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35810768/