Java getResourceAsStream()项目文件夹外文件的绝对路径

Java getResourceAsStream()项目文件夹外文件的绝对路径,java,file-io,getresource,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);

我想创建一个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();
    }
然后我像这样写入文件:

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();
    }
试试看{
BufferedWriter out=新的BufferedWriter(新的FileWriter(System.getProperty(“user.home”)+“/”+文件名));
对于(int j=0;j
我不知道为什么,但程序从不从user.home读取文件,它总是从项目文件夹读取一个文件。我哪里出错了?谢谢

您不能在JVM类路径之外的位置上使用。以下代码段之所以有效,是因为在JVM类路径中的某个地方存在
文件名

getClass().getResourceAsStream(file_name);
在下一个代码段中,您将尝试使用当前类的类加载器加载一个文件,该文件可能是JVM类路径的一部分,也可能不是JVM类路径的一部分

configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);
此路径将从中遍历的相对根节点也不能是控制器。使用
FileInputStream
并从绝对路径加载文件,如
/usr/local/file\u name

不能在JVM类路径之外的位置使用。以下代码段之所以有效,是因为在JVM类路径中的某个地方存在
文件名

getClass().getResourceAsStream(file_name);
在下一个代码段中,您将尝试使用当前类的类加载器加载一个文件,该文件可能是JVM类路径的一部分,也可能不是JVM类路径的一部分

configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);
此路径将从中遍历的相对根节点也不能是控制器。使用
FileInputStream
并从绝对路径加载文件,如
/usr/local/file\u name

不能在JVM类路径之外的位置使用。以下代码段之所以有效,是因为在JVM类路径中的某个地方存在
文件名

getClass().getResourceAsStream(file_name);
在下一个代码段中,您将尝试使用当前类的类加载器加载一个文件,该文件可能是JVM类路径的一部分,也可能不是JVM类路径的一部分

configStream = getClass().getResourceAsStream(System.getProperty("user.home")+ "/"+file_name);
此路径将从中遍历的相对根节点也不能是控制器。使用
FileInputStream
并从绝对路径加载文件,如
/usr/local/file\u name

不能在JVM类路径之外的位置使用。以下代码段之所以有效,是因为在JVM类路径中的某个地方存在
文件名

getClass().getResourceAsStream(file_name);
在下一个代码段中,您将尝试使用当前类的类加载器加载一个文件,该文件可能是JVM类路径的一部分,也可能不是JVM类路径的一部分

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

此路径将从中遍历的相对根节点也不能是控制器。使用
FileInputStream
并从绝对路径加载文件,如
/usr/local/file\u name

如何将txt保存到user.home?您的代码不包括保存部分。是否确实执行了循环?尝试在循环之外写一些东西。为什么要尝试从文件系统中读取文件作为资源?如何将txt保存到user.home?您的代码不包括保存部分。是否确实执行了循环?尝试在循环之外写一些东西。为什么要尝试从文件系统中读取文件作为资源?如何将txt保存到user.home?您的代码不包括保存部分。是否确实执行了循环?尝试在循环之外写一些东西。为什么要尝试从文件系统中读取文件作为资源?如何将txt保存到user.home?您的代码不包括保存部分。是否确实执行了循环?尝试在循环之外写一些东西。为什么要尝试从文件系统中读取文件作为资源?谢谢!我还没意识到解决办法这么简单。我从FileInputStream切换到getResourceAsStream,因为从jar运行程序后发生了异常。谢谢!我还没意识到解决办法这么简单。我从FileInputStream切换到getResourceAsStream,因为从jar运行程序后发生了异常。谢谢!我还没意识到解决办法这么简单。我从FileInputStream切换到getResourceAsStream,因为从jar运行程序后发生了异常。谢谢!我还没意识到解决办法这么简单。我从FileInputStream切换到getResourceAsStream,因为从jar运行程序后发生了异常。