[英]Absolute path to file outside of project folder with getResourceAsStream()
我想创建将读取txt fom jar的jar,然后将txt文件保存到user.home文件夹。 再次运行时,它将从user.home中读取文件。
我这样读取文件:
if(getClass().getResourceAsStream("/"+System.getProperty("user.home")+"/"+file_name) == null){
configStream = getClass().getResourceAsStream(file_name);
} else {
configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);
}
BufferedReader br = new BufferedReader(new InputStreamReader(configStream));
然后我这样写到文件:
try {
BufferedWriter out = new BufferedWriter(new FileWriter(System.getProperty("user.home")+ "/" + file_name));
for (int j = 0; j < y; j++) {
for (int i = 0; i < x; i++) {
if (((Block) (listArray.get(i).get(j))).getState() == blockState.blank) {
out.write("0");
} else if (((Block) (listArray.get(i).get(j))).getState() == blockState.solid) {
out.write("1");
} else if (((Block) (listArray.get(i).get(j))).getState() == blockState.player) {
out.write("I");
} else if (((Block) (listArray.get(i).get(j))).getState() == blockState.spikes) {
out.write("^");
} else if (((Block) (listArray.get(i).get(j))).getState() == blockState.water) {
out.write("~");
} else if (((Block) (listArray.get(i).get(j))).getState() == blockState.transparent) {
out.write("T");
}
}
out.write("\n");
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
我不知道为什么,但是程序从不从user.home读取文件,它总是从项目文件夹中读取文件。 我在哪里出错? 谢谢
您不能在JVM类路径之外的位置上使用getResourceAsStream 。 以下代码段有效,因为JVM类路径中的file_name
存在。
getClass().getResourceAsStream(file_name);
在下一个代码段中,您要尝试使用的是当前类的类加载器来加载文件,该文件可能是也可能不是JVM类路径的一部分。
configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);
将要遍历此路径的相对根节点也不能是控制器。 使用FileInputStream
并从绝对路径(例如/usr/local/file_name
加载文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.