Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使.jar资源文件指向正确的目录_Java_Javafx - Fatal编程技术网

Java 如何使.jar资源文件指向正确的目录

Java 如何使.jar资源文件指向正确的目录,java,javafx,Java,Javafx,因此,我清理并将其作为可运行的jar文件构建到我的项目中。有些场景需要从项目中的文件中获取数据。但由于某些原因,文件路径不正确。我在ide中的项目是这样的 我的项目中的路径是“src\ch\makery\address\util\settings.xml”,但当我运行.jar文件时,它变成了c:\users\bob\Desktop\src\ch\makery\address\util\settings.xml,它将抛出一个FileNotFoundException,有没有办法解决这个问题?如果

因此,我清理并将其作为可运行的jar文件构建到我的项目中。有些场景需要从项目中的文件中获取数据。但由于某些原因,文件路径不正确。我在ide中的项目是这样的


我的项目中的路径是“src\ch\makery\address\util\settings.xml”,但当我运行.jar文件时,它变成了c:\users\bob\Desktop\src\ch\makery\address\util\settings.xml,它将抛出一个FileNotFoundException,有没有办法解决这个问题?

如果您使用
ClassLoader.getSystemResourceAsStream()读取资源文件
那么在将项目导出到可运行的
jar

    InputStreamReader isr = new InputStreamReader(ClassLoader.getSystemResourceAsStream("ch\\makery\\address\\util\\settings.xml"));
    BufferedReader br = new BufferedReader(isr);

不要使用文件api访问资源。使用classloader/class访问资源url/从jar的资源条目创建的流。您可能还需要告诉ide在jar中包含资源文件。请注意,在这种情况下不可能进行书写。如果需要写入文件,请在方便的位置创建设置副本,除非该文件已存在。你可以,例如,我不能把所有东西都保存在我的jar文件中,我需要把它保存在用户的计算机上?并在需要时使用该路径进行读/写。@fabian你有什么好的例子吗?不要对路径使用反斜杠。使用普通斜杠。此外,可能最好使用用于加载标识资源的类的类加载器,而不是系统类加载器。例如,
DateUtil.class.getResourceAsStream(“/ch/makery/address/util/settings.xml”)
。此外,还有比
BufferedReader
..@fabian更好的读取xml文件的类,我正在使用jaxb读取xml。我只需要获取文件路径。@C.Ikongo使用正斜杠也会出现空指针异常?@umerfaroq是的,我不确定我做错了什么?我花了很多时间试图修复这个错误。是否有可以发布的java项目或代码?@C.Ikongo确保您使用了
ch/makery/address/util/settings.xml
not
src/ch/makery/address/util/settings.xml