2016-01-28 58 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目录中。