2016-08-30 101 views
-1

我目前正在製作一個項目,它有一個使用文本文件的用戶名和密碼系統。要嘗試保持我的項目組織,它們位於相同的netbeans文件夾中。但是,這些文件在src\classes\prototype1\textFiles之下,但添加用戶時正在編輯的文件在build\classes\prototype1\textFiles之下。造成這個問題的原因是,無論何時重新啓動netbeans,它只會關閉我在src文件夾中的原始數據,而不會從build文件夾中編輯的數據。編輯Java源文件

我使用的代碼是:

try { 
    File f = new File(getClass().getResource("textFiles\\PasswordScreen.txt").toURI()); 
    f.setWritable(true); 
    FileWriter w = new FileWriter(f); 
    BufferedWriter writer = new BufferedWriter(w); 
    wipeFile(f); 
    for (int i = 0; i <= length; i++){ 
     writer.write(user[i].getUsername()); 
     writer.newLine(); 
     writer.write(user[i].getPassword()); 
     writer.newLine(); 
     writer.write(Integer.toString(user[i].getState())); 
     writer.newLine(); 
     writer.write("-"); 
     writer.newLine(); 
    } 
    writer.close(); 
    f.setReadOnly(); 
} catch(Exception e){System.out.println("error writing to file");} 
+0

'src /'下的任何東西都是純粹要編譯的Java代碼。你不應該放置任何資源文件。 –

+1

爲什麼在'build'文件夾中編輯文件?一旦將代碼部署到.jar文件中,該文件甚至不會成爲硬盤上的文件。您編輯的任何文件都必須在應用程序代碼層次結構的外部。 – Andreas

+1

資源應被視爲只讀。應用程序通常以.jar文件形式提供,在這種情況下,您將無法寫入資源,因爲它不會是單獨的文件。 (另外,'getResource'在所有平臺上都使用正斜槓('/')作爲文件分隔符;參數本質上是一個相對URL。) – VGR

回答

1

這是效果的混合。

您正在尋址的文件位於classes文件夾中:此文件夾是編譯器的輸出文件夾。因此,它包含每個定義的易失性內容,因爲內容是從src文件夾創建的。

當啓動IDE(本例中爲NetBeans)時,它將清理項目並重建類,覆蓋以前編輯的用戶設置。

解決方法很簡單:不要將編輯的文件寫入classes文件夾。使用其他位置,例如當前目錄。這通常是IDE啓動的項目根目錄,並且可以被正確控制。

您可能希望將文件的位置配置在某處(命令行,環境變量,...)。

+0

謝謝,我會在早上嘗試這個,然後回報! –