Java:导出到JAR后路径名不起作用
我已经在eclipse中将一个项目导出到一个可运行的JAR中。在我的代码中有几个地方我做了以下工作Java:导出到JAR后路径名不起作用,java,jar,export,Java,Jar,Export,我已经在eclipse中将一个项目导出到一个可运行的JAR中。在我的代码中有几个地方我做了以下工作 String file = "src/Files/..."; loadFile(file); // purely for example 现在项目以JAR的形式出现,这些目录似乎不存在,加载这些文件失败。我很确定我引用的文件都打包在罐子里了。当导出到JAR时,目录是否以任何特定的方式更改?关于如何实现这一点还有其他想法吗?您需要将它们视为类路径资源,而不是本地磁盘文件系统路径。如果将文件打包到J
String file = "src/Files/...";
loadFile(file); // purely for example
现在项目以JAR的形式出现,这些目录似乎不存在,加载这些文件失败。我很确定我引用的文件都打包在罐子里了。当导出到JAR时,目录是否以任何特定的方式更改?关于如何实现这一点还有其他想法吗?您需要将它们视为类路径资源,而不是本地磁盘文件系统路径。如果将文件打包到JAR中,并且不希望依赖于工作目录,那么这将不起作用。JAR中的文件已经是类路径的一部分了 假设您在package
com.example
中有一个foo.txt
文件,那么您可以得到它的InputStream
,如下所示
InputStream input = getClass().getResourceAsStream("/com/example/foo.txt");
// ...
或者当您在静态环境中时
InputStream input = SomeClass.class.getResourceAsStream("/com/example/foo.txt");
// ...
或者当您想要扫描全局类路径时
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("/com/example/foo.txt");
// ...
另见:
您需要将它们视为类路径资源,而不是本地磁盘文件系统路径。如果将文件打包到JAR中,并且不希望依赖于工作目录,那么这将不起作用。JAR中的文件已经是类路径的一部分了
假设您在packagecom.example
中有一个foo.txt
文件,那么您可以得到它的InputStream
,如下所示
InputStream input = getClass().getResourceAsStream("/com/example/foo.txt");
// ...
或者当您在静态环境中时
InputStream input = SomeClass.class.getResourceAsStream("/com/example/foo.txt");
// ...
或者当您想要扫描全局类路径时
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("/com/example/foo.txt");
// ...
另见:
您可以在zip程序中打开.jar文件,查看所有导出的文件是否正确。您可能还想看看如何为您的文件路径使用classpath://。这篇文章可能也会有帮助。您可以在zip程序中打开.jar文件,查看所有导出的文件是否正确。您可能还想看看如何为您的文件路径使用classpath://。这篇文章可能也会有帮助。谢谢这适用于所有文件流。如果我需要使用BufferedWriter怎么办?@Charlotte:将InputStreamReader+BufferedReader包装在InputStream周围。使用InputStreamReader
确实可以从中获得Reader
。但是,你不能给它写信。根据功能需求,还有其他解决方案。请随便问一个新问题。谢谢。这适用于所有文件流。如果我需要使用BufferedWriter怎么办?@Charlotte:将InputStreamReader+BufferedReader包装在InputStream周围。使用InputStreamReader
确实可以从中获得Reader
。但是,你不能给它写信。根据功能需求,还有其他解决方案。请随便问一个新问题。