以.txt作为资源导出.jar将不起作用

时间:2013-01-30 15:11:05

标签: java eclipse

我有关于.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。

我尝试了什么:

  1. 删除项目并导入新项目
  2. 喜欢1,但是进入新工作区
  3. 我的系统是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
    

2 个答案:

答案 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,则可以将内容流式传输到临时文件。