Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I/O延迟在文件系统中创建文件_Java_File_Exception_Io - Fatal编程技术网

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

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

我有使用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();
//遗留代码
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 is
dBufferedWriter
?此代码无法编译。您希望避免什么类型的错误?你在做什么样的错误处理?我在您的代码片段中没有看到任何内容。请给我们一个完整的示例,说明您在这里试图完成的任务,以及编写器正在测试什么?例如,如果str=“password”我想跳过创建文件。对字符串值有什么规则并不重要,但对字符串进行一些验证。让我修改代码来解释它。我将执行私有布尔validateContent(对象数据)。如果且仅当其为罚款,则调用文件io partWhat is
dBufferedWriter
?这段代码没有编译。谢谢,我可以用这种方式删除它,但是有没有更好的方法呢。就像Java应该将文件写入文件系统一样,只有在我知道值是正确的情况下才会写入文件系统。@amitmah您需要在验证循环中向文件写入任何内容吗?不,这不是强制性的,我可以在循环结束后写入。@amitmah我更新了答案以使用
最终
。这个方法更正确。谢谢我会试试这个谢谢,我可以用这个方法删除它,但是有没有更好的方法呢。就像Java应该将文件写入文件系统一样,只有在我知道值是正确的情况下才会写入文件系统。@amitmah您需要在验证循环中向文件写入任何内容吗?不,这不是强制性的,我可以在循环结束后写入。@amitmah我更新了答案以使用
最终
。这样比较正确。谢谢。我试试这个