我有一段代碼可以正常作業,但我不明白為什么。這是說明問題的代碼的簡化版本:
String thisdir = System.getProperty("user.dir");
String newdir = thisdir "\\src\\test\\resources\\Test.txt";
File input = new File(newdir);
FileWriter writer = new FileWriter(input);
for (int i = 0; i < 1; i ) {
writer.write("completed");
}
for (int i = 0; i < 2; i ) {
writer.write(System.getProperty( "line.separator" ));
writer.write("completing");
}
String path = Paths.get(this.getClass().getResource("/Test.txt").toURI()).toFile().getPath();
該代碼在\src\test\resources 目錄中創建“Test.txt”。然后在第一行寫“完成”,然后在接下來的兩行寫“完成”x2。最后,它將“路徑”定義為檔案的路徑。
我的問題是:
- 假設在\src\test\resources 目錄中,我創建了一個Test.txt 檔案并在其中添加了一些隨機文本。然后,在我運行此代碼后,隨機文本消失并被“已完成”和“正在完成”x2 替換。為什么?我沒有使用任何方法,例如
trim洗掉文本。我的第一個猜測是,Java是簡單地覆寫文本(而不是洗掉一切,從一個空白檔案開始),但是當我測驗了它不作業-如果這個假設成立,那么如果我重新運行該代碼i < 1在for寫“完成”的回圈,檔案應該仍然包含兩行“完成”,但它沒有。 - 相反,如果我從 \src\test\resources 目錄中沒有檔案開始,那么定義行將
path回傳 NullPointerException。為什么?較早的代碼應該在該檔案夾中創建了“Test.txt”(當然在我運行代碼之后它就在那里),并且應該檢測到該檔案。如果我從目錄中的 Test.txt 檔案開始,那么代碼path也會作業并回傳預期的輸出。
我看過的教程似乎表明如果檔案已經存在,Java 將不會創建新檔案。但是,它并沒有解釋我的任何一個問題。
uj5u.com熱心網友回復:
對于第一個問題,當打開檔案進行寫入時(就像創建FileWriter 時一樣)它被清除,長度設定為 0。如果要追加,則需要打開檔案進行追加。有一個帶有布爾附加標志的建構式,您可以使用它。
對于第二個問題,getClass().getResource("/Test.txt")指的是通常在目標/類或 bin 中找到的已編譯資源。如果您從 src/resources 中洗掉檔案,它將不會被構建并且目標目錄中沒有檔案。運行程式時在 src 中創建檔案無濟于事;到那時為時已晚。未找到資源,您將獲得NullPointerException.
uj5u.com熱心網友回復:
我認為對于您的第一個問題會有所幫助 -如何將文本附加到 Java 中的現有檔案?
對于第二個問題:通常情況下,如果您不從 Java 代碼創建檔案,則 File 建構式會獲取檔案的檔案路徑,但不會創建它。因此,您必須使用 File 的 api 提供的 createNewfile() 方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341240.html
上一篇:洗掉N行檔案
