如何从JAR中的类路径中读取文件?

时间:2018-05-04 09:56:06

标签: java spring classpath

我使用以下代码从类路径中读取文件:

Files.readAllBytes(new ClassPathResource("project.txt").getFile().toPath())

project.txt位于我的WAR的src/main/resources时,这很好用。现在我重构了代码并将某些代码移到了JAR中。这个新的JAR现在包括src/main/resources/project.txt和上面的代码。现在,我在阅读文件时遇到以下异常:

java.io.FileNotFoundException: class path resource [project.txt]
cannot be resolved to absolute file path because it does
not reside in the file system:
jar:file:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/viewer-1.0.0-SNAPSHOT.jar!/project.txt

我仍然在Tomcat容器中执行WAR。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法从资源中按照您的方式引用jar中的文件。由于文件打包在jar中,您需要将其作为资源读取。 您必须使用classloader将该文件作为资源读取。

示例代码:

ClassLoader CLDR = this.getClass().getClassLoader();
InputStream inputStream = CLDR.getResourceAsStream(filePath);

如果您使用的是java 8及更高版本,则可以使用以下代码使用nio来读取您的文件:

final Path path = Paths.get(Main.class.getResource(fileName).toURI());
final byte[] bytes = Files.readAllBytes(path);
String fileContent = new String(bytes, CHARSET_ASCII);