如何在运行时修改 Jar 文件中的文本文件? [复制]

Posted

技术标签:

【中文标题】如何在运行时修改 Jar 文件中的文本文件? [复制]【英文标题】:How can I modify a text file inside a Jar file while runtime? [duplicate] 【发布时间】:2016-05-06 11:14:00 【问题描述】:

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

当导出为 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)

【问题讨论】:

.jar 中的文件不是实际文件。 new File 永远不会工作。正如其他人会告诉你的那样,.jar 中的文件是只读的。如果要编写新版本,请将其写入其他位置(临时文件、用户配置目录等),并在本地文件不存在时使用 .jar 中的文件作为备用。 【参考方案1】:

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

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

【讨论】:

以上是关于如何在运行时修改 Jar 文件中的文本文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

eclipse写的窗体在运行时图片能正常显示,打成jar包后无法显示

关闭并重新启动可执行文件后,无法修改或删除由我的 .jar 可执行文件创建的文本文件

通过jar命令替换jar包中的文件

java 如何读取jar包外的properties文件(转)

springboot运行时修改端口并且以守护进程运行

如何编辑dll文件