java - 使用 getResourceAsStream() 到项目文件夹外部的文件的绝对路径

标签 java file-io getresource

我想创建一个jar,它将读取txt fom 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 读取文件,它总是从项目文件夹中读取文件。我哪里出错了?谢谢

最佳答案

您不能使用getResourceAsStream位于不在 JVM 类路径内的位置。以下代码片段之所以有效,是因为 file_name 存在于 JVM 类路径中的某个位置。

getClass().getResourceAsStream(file_name);

在下一个代码片段中,您尝试执行的操作是使用当前类的类加载器来加载可能属于也可能不属于 JVM 类路径一部分的文件。

configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);

将从该路径遍历的相对根节点也不能是 Controller 。使用 FileInputStream 并从绝对路径(如 /usr/local/file_name)加载文件。

关于java - 使用 getResourceAsStream() 到项目文件夹外部的文件的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851461/

相关文章:

java - 需要澄清 Java 中的 HashSet 和重复项

java - 如何使用JDBC读取mysql中的JSON数据类型

java - 为什么 rJava 不能在使用 OpenJDK 7 的 Ubuntu 14.04 上运行?

python - 需要一种方法来确定文件是否已写入

c++ - 使用 fstream 从文本文件中读取数据

java - OpenJdk 上的 getResource 抛出 java.nio.file.NoSuchFileException

java - 如何断言断言的数量(或强制所有成员都已在断言中进行测试的其他方式)?

file-io - 与平台无关的文件锁定?

java - getResourceStream 写入文件

java class.getResource 在 vscode 中返回 null