0

我有一个关于 .jar 导出的问题。我必须在我的 jar 中包含一个 .txt 文件,从那里我将单词读入列表。我用它来实现(在eclipse运行+调试模式下效果很好):

File file = new File(Worte.class.getClassLoader().getResource("resource/wortliste.txt").getFile());

现在,如果我将它导出到 JAR 文件中,JAR 文件应该是可执行的,并且它在资源中包含 list.txt 和 .java 文件(因为它应该是家庭作业;-)),但程序的行为就像没有文件。当我使用 getResourceAsStream() 时,我遇到了同样的问题。有谁知道为什么这不起作用?我不明白,因为我两周前用另一个代码做了这个,它工作了o_O。

我试过的:

  1. 删除项目并导入新项目
  2. 像 1,但进入一个新的工作区

我的系统是 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
4

2 回答 2

0

试试这个:

URL url = Thread.currentThread().getContextClassLoader().getResource("resource/list.txt");

文件文件=新文件(url.getFile());

于 2013-01-30T15:21:23.487 回答
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());
        }
    }

}

你应该看到类似的东西,

网址:jar:file:/C:/some/path/my.jar!/resource/wortliste.txt

文件:file:\C:\some\path\my.jar!\resource\wortliste.txt

文件存在:假

Caught FileNotFoundException: file:\C:\some\path\my.jar!\resource\wortliste.txt(文件名、目录名或卷标语法不正确)

相反,用于Class.getClassLoader().getResourceAsStream(String)获取InputStream用于读取文件的内容。如果您仍需要以 . 格式读取内容File,则可以将内容流式传输到临时文件。

于 2013-01-30T16:18:18.317 回答