我一直在寻找解决这个问题的几个小时,并找到了关于类似问题的多篇帖子,但我发现似乎没有做我正在尝试的确切事情。
我在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
时,它可以找到资源,但这不是我想要组织我的项目的方式。
有没有办法做到这一点我错过了,或者我应该更改我的文件夹结构?
你应该能够通过以下方式获得路径:
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());
}
}
您将不得不更改您的结构,例如使res
成为源文件夹(您可以拥有多个源文件夹)。它不是真正的源文件夹,而是将资源复制到构成生成的jar内容的同一个树中。