2016-01-28 51 views
0

那麼問題說,這可能是怎麼回事? 這個文件是我的proyect結構(我使用的是eclipse)。如何在運行時修改Jar文件中的文本文件?

enter image description here

當作爲罐出口,我可以訪問和使用,但下面的代碼打印通過控制檯的「root.ini」的內容,我怎麼能寫,而運行時文件?

這種方法是從所謂的「Main.java」

private void readRoot(){ 
    InputStream is = getClass().getResourceAsStream("/img/root.ini"); 
    BufferedReader br = null; 

    br = new BufferedReader(new InputStreamReader(is)); 
    String path = ""; 

    try { 
     path = br.readLine(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println(path); 
} 

什麼實際上,我試圖做的是得到一個JTextField一些文本,並將其保存爲「root.ini」文件。

所以,當我嘗試寫這樣

private void writeRoot() { 
    URL u = getClass().getResource("/img/root.ini"); 
    File f = null; 
    try { 
     f = new File(u.toURI()); 
     FileWriter fw = new FileWriter(f.getAbsolutePath()); 
     BufferedWriter bw = new BufferedWriter(fw); 

     bw.write("Sample text"); //This String is obtained from a TextField.getText(); 

     bw.close(); 
     fw.close(); 
    } catch (URISyntaxException | IOException e) { 
     e.printStackTrace(); 
    } 
} 

該文件,並拋出我這個錯誤

C:\用戶\弗朗西斯\桌面\ TDS> Java的罐子TDS.jar (未知源) at main.Configuracion.writeRoot(Configuracion.java:99) at main(「主題」) at main.Configuracion.writeRoot(Configuracion.java:99) at main .Configuracion.access $ 1(Configuracion。 java:95)

+1

.jar中的文件不是實際的文件。 '新的文件'將永遠不會工作。正如其他人會告訴你的,.jar中的文件是隻讀的。如果要編寫新版本,請將其寫入其他位置(臨時文件,用戶配置目錄等),並在該本地文件不存在時將.jar中的文件用作後備文件。 – VGR

回答

0

您無法更改jvm當前使用的jar的任何內容。該文件被操作系統認爲是鎖定的,因此無法更改。

我建議在你的jar文件之外寫這個文件。例如在相對於當前工作目錄的/conf目錄中。