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

标签 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();

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

最佳答案

当您创建新的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/

相关文章:

java - 尝试使用 String 变量和 Class.forName 启动 Activity ,不断抛出 ClassNotFound 帮助

java - 控制在 Java 中创建的临时文件的名称

ruby-on-rails - ActiveRecord 创建(不是!)在验证时抛出异常

java - 如何更改 Spring 异常的语言

java.lang.Exception : java. lang.VerifyError:JVMVRFY012堆栈形状不一致;

java - 将新数据追加到 ArrayList 的简单方法

java - Db4o,Java : Storing images using blobs

python - 如何更正文件扩展名?

c - 如何在 C 中在终端上显示输出并同时保存到文件?

python - 如何捕获 "kill"异常