2016-03-05 104 views
0

我有使用BufferedWriter在文件系統中創建文件的遺留代碼。在文件系統中創建文件的Java I/O延遲

問題是,當程序中有一些驗證錯誤時,它會創建一個空文件。 當存在驗證錯誤時,它不應該創建文件,但只有在寫入數據(驗證)時纔會檢測到錯誤。 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

你想避免什麼樣的錯誤?你在做什麼樣的錯誤處理?我在你的代碼片段中沒有看到任何東西。 – Learner

+0

請給我們一個完整的例子,你在這裏試圖完成什麼,作家測試什麼? –

+0

例如,如果str =「密碼」,我想跳過創建文件。不管字符串值有什麼規則,但是一些驗證是通過字符串完成的。讓我修改代碼來解釋它。 – amitmah

回答

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(); 
+0

謝謝,我可以用這種方式刪除它,但有沒有更好的方法來做到這一點。就像Java應該將文件寫入文件系統一樣,只有在我知道這些值是正確的時候才結束。 – amitmah

+0

@amitmah是否需要在驗證循環中將任何內容寫入文件? –

+0

沒有它不是強制性的,我可以在循環結束後寫出它。 – amitmah

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是一樣的。