Java I / O延迟在文件系统中创建文件

时间:2016-03-05 06:09:51

标签: java file exception io

我有遗留代码,它使用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();

有没有办法在不需要时延迟创建文件?

2 个答案:

答案 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();        
}

...假设dBufferedWriterwriter1是一回事。