我有一个用Maven构建的Java应用程序。我有一个资源文件夹com/pkg/resources/...
,我需要从中访问文件。例如directory.txt
。我一直在寻找各种教程和其他SO答案,但似乎没有一个对我有用。现在我有:
ClassLoader classLoader = getClass.getClassLoader();
File file = new File(classLoader.getResource("/directory.txt");
当我输出f.length
时,我得到0字节的结果。我也试过了:
InputStream is = (this.getClass().getClassLoader().getResourceAsStream("/directory.txt"));
try{
File file = File.createTempFile("dir", ".txt");
Files.copy(is, file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
但是那段代码也不起作用。我之前没有从JAR访问文件。关于可能出现什么问题的任何想法?
答案 0 :(得分:1)
首先,使用“src / main / resources”文件夹,例如en资源,你可以拥有一个名为的文件:dummy.txt
完整路径应为:src / main / resources / dummy.txt
在某些课程中,您可以阅读dummy.txt,如下:
String dummy = new String(IOUtils.toByteArray(this.getClass().getClassLoader().getResourceAsStream("/dummy.txt")));
此外,如果你想在那里有文件夹,你可以拥有它。例如:
的src /主/资源/ COM /包装/资源/ dummy.txt
String dummy = new String(IOUtils.toByteArray(this.getClass().getClassLoader().getResourceAsStream("/com/pkg/resources/dummy.txt")));
考虑到在这个例子中我们对pom.xml
中的类路径信息一无所知注意:IOUtils来自commons-io,例如:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
答案 1 :(得分:0)
资源进入src/main/resources/my/package/whatever
。一旦它们成为它们,Maven会将它们包含在输出jar中,您可以从classpath引用它们。我通常使用番石榴。如果foo.bar.baz.MyClass
有相应的文件foo/bar/baz/somefile.txt
,我会写。
URL url = Resources.getResource("somefile.txt", MyClass.class);
ByteSource source = Resources.asByteSource(url);
try (InputStream is = source.openSource()) {
// consume contents
}
答案 2 :(得分:0)
如果maven未在jar中包含资源文件夹,则可以使用以下代码在jar中包含资源文件夹。 Maven默认搜索src / main / java / resources中的resources文件夹,如果您的资源不在该路径中,则maven不包含在类路径中。下面是在classpath中明确包含资源文件夹的代码。添加你的pom.xml
<build>
....
<resources>
<resource>
<directory>path-of-resource-folder</directory>
</resource>
</resources>
....
</build>