如何在运行时修改Jar文件中的文本文件?

时间:2016-01-28 21:24:01

标签: java jar inputstream bufferedreader bufferedwriter

正如问题所说,这怎么可能? 这个文件是我的proyect结构(我使用eclipse)。

enter image description here

当导出为Jar时,我可以访问并打印" 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:\ Users \ Francisco \ Desktop \ tds> java -jar TDS.jar   线程中的异常" AWT-EventQueue-0" java.lang.IllegalArgumentException:URI不是分层的           在java.io.File。(未知来源)           在main.Configuracion.writeRoot(Configuracion.java:99)           在main.Configuracion.access $ 1(Configuracion.java:95)

1 个答案:

答案 0 :(得分:1)

您无法更改jvm当前使用的jar的任何内容。该文件被操作系统视为锁定,因此无法更改。

我建议在jar文件之外写这个文件。例如在相对于当前工作目录的/conf目录中。