Java I/O延迟在文件系统中创建文件
我有使用BufferedWriter在文件系统中创建文件的遗留代码 问题是,当程序中出现一些验证错误时,它会创建一个空文件。 当存在验证错误时,它根本不应该创建文件,但只有在向其写入数据(验证)时才会检测到错误。PFB示例代码:Java I/O延迟在文件系统中创建文件,java,file,exception,io,Java,File,Exception,Io,我有使用BufferedWriter在文件系统中创建文件的遗留代码 问题是,当程序中出现一些验证错误时,它会创建一个空文件。 当存在验证错误时,它根本不应该创建文件,但只有在向其写入数据(验证)时才会检测到错误。PFB示例代码: //Legacy code File file1= new File(<path to directory>); BufferedWriter dBufferedWriter = new BufferedWriter(new FileWrit
//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();
//遗留代码
File file1=新文件();
BufferedWriter dBufferedWriter=new BufferedWriter(new FileWriter(file1));
//可能有错误且在循环中重复的代码
String str=“出现错误时为某个字符串或null”;
如果(验证(str)){
dBufferedWriter.write(str);
}
//最后
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();
}
创建新的
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();
}
因此,如果不需要该文件,则遗留代码不应创建该文件。所以要解决这个问题
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();
}
String str=“出现错误时为某个字符串或null”;
如果(验证(str)){
File file1=新文件();
BufferedWriter writer1=新的BufferedWriter(新的FileWriter(file1));
dBufferedWriter.write(str);
dBufferedWriter.close();
}
。。。假设
dBufferedWriter
和writer1
是同一件事。因此,如果不需要旧代码,则不应创建该文件。所以要解决这个问题
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();
}
String str=“出现错误时为某个字符串或null”;
如果(验证(str)){
File file1=新文件();
BufferedWriter writer1=新的BufferedWriter(新的FileWriter(file1));
dBufferedWriter.write(str);
dBufferedWriter.close();
}
。。。假设
dBufferedWriter
和writer1
是同一件事。您希望避免哪种错误?你在做什么样的错误处理?我在您的代码片段中没有看到任何内容。请给我们一个完整的示例,说明您在这里试图完成的任务,以及编写器正在测试什么?例如,如果str=“password”我想跳过创建文件。对字符串值有什么规则并不重要,但对字符串进行一些验证。让我修改代码来解释它。我将执行私有布尔validateContent(对象数据)。如果且仅当其为罚款,则调用文件io partWhat isdBufferedWriter
?此代码无法编译。您希望避免什么类型的错误?你在做什么样的错误处理?我在您的代码片段中没有看到任何内容。请给我们一个完整的示例,说明您在这里试图完成的任务,以及编写器正在测试什么?例如,如果str=“password”我想跳过创建文件。对字符串值有什么规则并不重要,但对字符串进行一些验证。让我修改代码来解释它。我将执行私有布尔validateContent(对象数据)。如果且仅当其为罚款,则调用文件io partWhat isdBufferedWriter
?这段代码没有编译。谢谢,我可以用这种方式删除它,但是有没有更好的方法呢。就像Java应该将文件写入文件系统一样,只有在我知道值是正确的情况下才会写入文件系统。@amitmah您需要在验证循环中向文件写入任何内容吗?不,这不是强制性的,我可以在循环结束后写入。@amitmah我更新了答案以使用最终。这个方法更正确。谢谢我会试试这个谢谢,我可以用这个方法删除它,但是有没有更好的方法呢。就像Java应该将文件写入文件系统一样,只有在我知道值是正确的情况下才会写入文件系统。@amitmah您需要在验证循环中向文件写入任何内容吗?不,这不是强制性的,我可以在循环结束后写入。@amitmah我更新了答案以使用最终。这样比较正确。谢谢。我试试这个