我有关于.jar导出的问题。我必须在我的jar中包含一个.txt文件,从那里我将单词读入列表。我用它来实现(在eclipse Run + Debug模式下运行良好):
File file = new File(Worte.class.getClassLoader().getResource("resource/wortliste.txt").getFile());
现在,如果我将它导出到JAR文件中,JAR文件应该是可执行的,并且它包含资源中的list.txt和.java文件(因为它应该是因为它是作业;-)),但是程序就像没有文件一样。当我使用getResourceAsStream()时,我遇到了同样的问题。有谁知道为什么这不起作用?我不明白,因为我在2周前用另一个代码做了这个,并且它工作了o_O。
我尝试了什么:
我的系统是Windows 7 x64 PC,Eclipse Juno和JRE7。
我用于导出的选项:
[] Export generated class files and resources
[x] export all output folders...
[x] export java source files...
[] export refactorings
[x] compress the contents...
[x] add directory entries
[x] overwrite existing files without warning
jar tvf ...
39 Wed Jan 30 16:19:14 CET 2013 META-INF/MANIFEST.MF
0 Wed Jan 30 00:34:16 CET 2013 resource/
100250 Wed Jan 30 00:37:24 CET 2013 resource/wortliste.txt
0 Wed Jan 30 00:34:16 CET 2013 wortspiel/
1291 Wed Jan 30 01:19:14 CET 2013 wortspiel/BuchstabenKollektion.java
2251 Sun Jan 27 16:24:42 CET 2013 wortspiel/TestBuchstabenKollektion.java
506 Sun Jan 27 17:38:48 CET 2013 wortspiel/UI.java
1187 Sun Jan 27 16:24:42 CET 2013 wortspiel/TestWorte.java
2932 Wed Jan 30 01:25:00 CET 2013 wortspiel/WortspielGUI.java
4384 Wed Jan 30 01:50:40 CET 2013 wortspiel/Worte.java
310 Sun Jan 27 16:25:08 CET 2013 .classpath
383 Sun Jan 27 16:22:32 CET 2013 .project
1992 Wed Jan 30 16:02:12 CET 2013 wortspiel/BuchstabenKollektion.class
2075 Wed Jan 30 16:02:12 CET 2013 wortspiel/TestBuchstabenKollektion.class
1104 Wed Jan 30 16:02:12 CET 2013 wortspiel/TestWorte.class
942 Wed Jan 30 16:02:12 CET 2013 wortspiel/UI.class
4701 Wed Jan 30 16:02:12 CET 2013 wortspiel/Worte.class
688 Wed Jan 30 16:02:12 CET 2013 wortspiel/WortspielGUI$1.class
688 Wed Jan 30 16:02:12 CET 2013 wortspiel/WortspielGUI$2.class
3475 Wed Jan 30 16:02:12 CET 2013 wortspiel/WortspielGUI.class
答案 0 :(得分:0)
试试这个:
URL url = Thread.currentThread()。getContextClassLoader()。getResource(“resource / list.txt”);
文件文件=新文件(url.getFile());
答案 1 :(得分:0)
您不能使用java.io.File
来获取jar内文件的内容。尝试运行以下代码段
public class TestGetResource
{
public static void main(String[] args) throws Exception
{
URL url = TestGetResource.class.getResource("/resource/wortliste.txt");
System.out.println("URL: " + url);
File f = new File(url.getFile());
System.out.println("File: " + f);
System.out.println("File exists: " + f.exists());
try {
FileReader reader = new FileReader(f);
reader.read();
} catch (FileNotFoundException notFoundEx) {
System.out.println("Caught FileNotFoundException: " + notFoundEx.getMessage());
}
}
}
您应该看到类似的内容,
URL:jar:file:/ C:/some/path/my.jar!/resource/wortliste.txt
文件:file:\ C:\ some \ path \ my.jar!\ resource \ wortliste.txt
文件存在:false
Caught FileNotFoundException:file:\ C:\ some \ path \ my.jar!\ resource \ wortliste.txt(文件名,目录名或卷标语法不正确)
相反,请使用Class.getClassLoader().getResourceAsStream(String)
获取InputStream
来读取文件。如果您仍需要将内容读作File
,则可以将内容流式传输到临时文件。