Java IO 写时出错,读时不出错
Java IO Error when writing but not when reading
所以问题是我尝试读取打包在 .jar 中的配置文件,它工作正常,但是当涉及到写入文件时,找不到文件,但他们使用的是相同的
getClass().getResource(Path);
它似乎只适用于输入流。
这是我的IO的所有代码class。
package com;
publicclass输入输出{
public boolean CheckStream () {
String LineRead;
try {
InputStream IS = getClass().getResourceAsStream("Config.txt");
InputStreamReader ISR = new InputStreamReader (IS,Charset.forName("UTf-8"));
BufferedReader BR = new BufferedReader(ISR);
if ((LineRead = BR.readLine()) != null) {
BR.close();
return true;
}
IS.close();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public void Write (String Path, String [] ThingsToWrite) throws FileNotFoundException {
OutputStream Out = new FileOutputStream (getClass().getResource(Path).getPath());
PrintStream PS = new PrintStream (Out);
for (int i = 0; i < ThingsToWrite.length; i ++) {
PS.print(ThingsToWrite[i]);
}
PS.close();
}
}
非常感谢任何帮助。
您不能只写入 jar 文件中的文件 - 它不是常规意义上的文件。
虽然你可以解压整个jar文件,写入新内容,然后重新打包,但最好重新设计,这样你就不会需要更新jar文件。
例如,您可能有一个常规的本地文件,如果它存在则使用它,但如果不存在则回退到从 jar 文件读取。那么你只需要写入到本地文件即可。
所以问题是我尝试读取打包在 .jar 中的配置文件,它工作正常,但是当涉及到写入文件时,找不到文件,但他们使用的是相同的
getClass().getResource(Path);
它似乎只适用于输入流。
这是我的IO的所有代码class。
package com;
publicclass输入输出{
public boolean CheckStream () {
String LineRead;
try {
InputStream IS = getClass().getResourceAsStream("Config.txt");
InputStreamReader ISR = new InputStreamReader (IS,Charset.forName("UTf-8"));
BufferedReader BR = new BufferedReader(ISR);
if ((LineRead = BR.readLine()) != null) {
BR.close();
return true;
}
IS.close();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public void Write (String Path, String [] ThingsToWrite) throws FileNotFoundException {
OutputStream Out = new FileOutputStream (getClass().getResource(Path).getPath());
PrintStream PS = new PrintStream (Out);
for (int i = 0; i < ThingsToWrite.length; i ++) {
PS.print(ThingsToWrite[i]);
}
PS.close();
}
}
非常感谢任何帮助。
您不能只写入 jar 文件中的文件 - 它不是常规意义上的文件。
虽然你可以解压整个jar文件,写入新内容,然后重新打包,但最好重新设计,这样你就不会需要更新jar文件。
例如,您可能有一个常规的本地文件,如果它存在则使用它,但如果不存在则回退到从 jar 文件读取。那么你只需要写入到本地文件即可。