目前,在我的 java 程序中,我正在访问项目文件夹中的一个文件。当我加载文件时,它的路径是“./src/package/package/file.txt”。当我将程序构建为可执行文件时,它不起作用。
我希望这些文件位于 .jar 之外,但在同一个文件夹中,我将如何解决这个问题?
萨米沙尔
目前,在我的 java 程序中,我正在访问项目文件夹中的一个文件。当我加载文件时,它的路径是“./src/package/package/file.txt”。当我将程序构建为可执行文件时,它不起作用。
我希望这些文件位于 .jar 之外,但在同一个文件夹中,我将如何解决这个问题?
萨米沙尔
如果它们在同一个文件夹中,您可以使用相对路径,例如./file.txt
. 即使使用已编译的 JAR,这也应该继续存在。
否则,如果您要使用同一台机器并且对文件的放置有信心,您可以使用绝对路径,但我不推荐它。
您可以Class.getResourceAsStream
使用InputStream
. 它也适用于 jar 包。无法File
直接使用 API 访问 jar 文件中的文件。
InputStream ins = Class.getResourceAsStream("/gigadot/exp/resource.properties");
更多详细信息,请访问http://blog.gigadot.net/2010/10/loading-classpath-resources.html
因为相对路径是相对于执行程序时命令提示符所在的位置,而不是程序所在的位置。
您需要以某种方式告诉程序在哪里可以找到资源。大多数人使用 .sh/.bat 脚本来确定脚本本身所在的位置,然后传递 -D 标志或根据该位置设置类路径。
作为说明,I $0 为您提供在 linux 命令行上运行的脚本(它可以是相对的或绝对的),您可以从那里使用 dirname 找到它的目录,并更改 java 命令行。
在 Windows 中 %~dp0 为您提供运行的批处理脚本的目录,您可以使用它来形成您的 java 命令行。