Java 如何使.jar资源文件指向正确的目录
因此,我清理并将其作为可运行的jar文件构建到我的项目中。有些场景需要从项目中的文件中获取数据。但由于某些原因,文件路径不正确。我在ide中的项目是这样的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,有没有办法解决这个问题?如果
我的项目中的路径是“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
notsrc/ch/makery/address/util/settings.xml