我有遗留代码,它使用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();
有没有办法在不需要时延迟创建文件?
答案 0 :(得分:1)
当您创建新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();
答案 1 :(得分:1)
因此遗留代码不应该创建文件,如果不需要的话。所以修复它。
String str = "some string or null if error occurs";
if(validate(str)){
File file1= new File(<path to directory>);
BufferedWriter writer1 = new BufferedWriter(new FileWriter(file1));
dBufferedWriter.write(str);
dBufferedWriter.close();
}
...假设dBufferedWriter
和writer1
是一回事。