如何在运行时修改 Jar 文件中的文本文件?
How can I modify a text file inside a Jar file while runtime?
正如问题所说,这怎么可能?
这个文件是我的proyect结构(我用的是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
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.(Unknown Source)
at main.Configuracion.writeRoot(Configuracion.java:99)
at main.Configuracion.access(Configuracion.java:95)
您不能更改当前由 jvm 使用的 jar 的任何内容。此文件被操作系统锁定,因此无法更改。
我建议将这个文件写在你的 jar 文件之外。例如在相对于当前工作目录的 /conf
目录中。
正如问题所说,这怎么可能? 这个文件是我的proyect结构(我用的是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 Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: URI is not hierarchical at java.io.File.(Unknown Source) at main.Configuracion.writeRoot(Configuracion.java:99) at main.Configuracion.access(Configuracion.java:95)
您不能更改当前由 jvm 使用的 jar 的任何内容。此文件被操作系统锁定,因此无法更改。
我建议将这个文件写在你的 jar 文件之外。例如在相对于当前工作目录的 /conf
目录中。