我一直在寻找解决这个问题的几个小时,并找到了关于类似问题的多篇帖子,但我发现似乎没有做我正在尝试的事情。
我在res
文件夹的同一级别有一个src
文件夹,我用它来处理图片和文本文件等内容。我只需执行以下操作即可轻松地在Eclipse中吐出文本文件:
FileInputStream fis = new FileInputStream("res/misc/foo.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
但是,当我将其打包在可运行的JAR文件中时,问题就开始了。我发现多个线程指出了这一点:
Class.class.getResourceAsStream("/misc/foo.txt");
但是,这仅在资源与类位于同一source
文件夹中时才有效。事实上,当我将res
文件夹移动到src
时,它可以找到资源,但这不是我想要组织项目的方式。
有没有办法让我错过,或者我应该更改我的文件夹结构?
答案 0 :(得分:0)
你应该可以通过以下方式获得路径:
String path = <YourClassName>.class.getProtectionDomain().getCodeSource().getLocation().getPath();
然后进行快速测试以检查目录是否存在:
File folder = new File(path);
File[] dirList = folder.listFiles();
for (File list : dirList) {
if (list.isDirectory()) {
System.out.println("Directory " + list.getName());
}
}
答案 1 :(得分:0)
您必须更改结构,例如make res
也是一个源文件夹(您可以拥有多个源文件夹)。它不是关于是源文件夹,它是关于将资源复制到构成生成的jar内容的同一个树中。
答案 2 :(得分:0)
就像nitind所说的那样:
将文件夹res
创建为源文件夹(就像src
一样)。将文件放在此处,然后就可以像访问src
中的文件一样访问文件,即
FileInputStream fis = new FileInputStream("/misc/foo.txt");
在Eclipse中,您可以简单地创建一个新文件作为“源文件夹”。您也可以只复制scr
文件夹并将其重命名为res
。
答案 3 :(得分:0)
使用Maven资源插件, 资源插件将文件从输入资源目录复制到输出目录。
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
...
</configuration>
</plugin>
假设我们想将资源文件从目录input-resources复制到目录output-resources,并且要排除所有以扩展名.png结尾的文件。
就像排除一样,您可以使用
包含文件使用此配置可以满足以下要求:
<configuration>
<outputDirectory>output-resources</outputDirectory>
<resources>
<resource>
<directory>input-resources</directory>
<excludes>
<exclude>*.png</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>