事情是這樣的,我創建一個文件,XML資源在創建後使用。程序執行完畢後,該文件應該被刪除。這是發生了什麼:Java程序在寫入後不能使用文件寫入
我運行的程序,文件不存在... 文件應該使用FileWriter的創建:
File file = new File("src/main/resources/org/avalin/optaplanner/solver/employeeShiftsScoreRules.drl");
try (FileWriter fileWriter = new FileWriter(file))
{
fileWriter.write("Content...");
fileWriter.flush();
fileWriter.close();
}
catch(IOException e)
{
e.printStackTrace();
}
然後,我有這樣的代碼:
private static synchronized Solver buildSolver()
{
SolverFactory solverFactory =
SolverFactory.createFromXmlResource(SOLVER_CONFIG_XML);
return solverFactory.buildSolver();
}
文件寫入也包含在一個同步方法中,但我認爲,因爲它們不直接訪問同一個變量,所以它們沒有任何影響。該文件正在從上面看到的SOLVER_CONFIG_XML中讀取。
當程序結束時,它會刪除指定路徑上的文件,以便下次運行時根據提供給程序的參數創建該文件。
現在,這是發生了什麼...... 我第一次運行該程序,我得到一個錯誤,說文件不被寫入。
異常在線程 「主」 java.lang.IllegalArgumentException異常:該scoreDrl(ORG/avalin/optaplanner /求解器/ employeeShiftsScoreRules.drl)不存在在類加載器
我一個classpath資源可以在文件寫入之後立即打印,這就結束了HAS第一次運行的方法,但由於某種原因,在程序第一次執行前,該文件不是「創建」的...
The第二次,程序運行良好,因爲該文件是在它發生異常之前創建的?
在我的程序的下一部分執行之前,有沒有辦法確保文件「完全寫入」?每次文件的長度都不相同,因爲它是根據用戶輸入的內容動態創建的,所以我無法檢查。我會認爲它會被完全寫入,因爲它執行我在fileWriter.close()後創建的打印,但顯然不是這樣。
看起來類加載器在啓動時緩存可用文件。您需要使該緩存無效,或者可能使用自定義類加載器。 – daniu