Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时修改Jar文件中的文本文件?_Java_Jar_Inputstream_Bufferedreader_Bufferedwriter - Fatal编程技术网

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

Java 如何在运行时修改Jar文件中的文本文件?,java,jar,inputstream,bufferedreader,bufferedwriter,Java,Jar,Inputstream,Bufferedreader,Bufferedwriter,正如问题所说,这怎么可能? 这个文件是我的proyect结构(我正在使用eclipse) 当导出为Jar时,我可以使用下面的代码通过控制台访问和打印“root.ini”内容,但在运行时如何写入该文件 此方法是从“Main.java”调用的 我实际上要做的是从JTextField中获取一些文本,并将其保存到“root.ini”文件中 所以当我尝试像这样写入文件时 private void writeRoot() { URL u = getClass().getResource("/img

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

当导出为Jar时,我可以使用下面的代码通过控制台访问和打印“root.ini”内容,但在运行时如何写入该文件

此方法是从“Main.java”调用的

我实际上要做的是从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)


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


我建议在jar文件之外编写这个文件。e、 g.在相对于当前工作目录的
/conf
目录中

.jar中的文件不是实际的文件<代码>新文件将永远无法工作。正如其他人会告诉你的那样,.jar中的文件是只读的。如果要编写新版本,请将其写入其他地方(临时文件、用户配置目录等),并在本地文件不存在时使用.jar中的文件作为备用文件。
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();
    }
}