【问题标题】:null value for a ressource in JavaJava中资源的空值
【发布时间】:2017-03-15 18:59:05
【问题描述】:

我想将资源放在我的 JAR 文件中,但是当我想使用它时出现问题。如果我用这段代码显示路径:

JOptionPane.showMessageDialog(null, MyStaticClass.class.getResource("/ressources/") + "file.File" + i, "OK", JOptionPane.INFORMATION_MESSAGE);
                File file = new File(MyStaticClass.class.getResource("/ressources/") + "file.File" + i);

messagebox 的结果是 jar:file:/home/clement/Bureau/Untitled.jar!/ressources/niveau.Niveau1 和 exeption

java.io.FileNotFoundException: jar:file:/home/clement/Bureau/Untitled.jar!/ressources/file.File1 (No file or folder of this type)

文件位于 src/ressources/file.File1 的 src 文件夹中

【问题讨论】:

标签: java jar executable-jar


【解决方案1】:

getResourceAsStream() 返回一个InputStream。您的代码基本上试图找到不是文件而是目录的文件“/ressources/”,因此getResourceAsStream() 为它返回null

打印InputStream 毫无意义。你可以做的是这样的:

InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1")

然后阅读它的内容(例如,使用InputStreamread() 方法,或者用InputStreamReader 包装它并使用它的read()。很难给出更多建议,因为我不知道你想用你读到的东西做什么。

更新问题代码的更新如下

getResource() 返回一个 URL 实例,它也不适合打印(以及使用 + 运算符连接)。但如果您愿意,可以借助 getFile() 方法将其转换为 File 实例:

File file = new File(MyStaticClass.class.getResource("/ressources/" + "file.File" + i).getFile());

还请注意,getResource() 是在完整的资源名称上调用的,而不仅仅是目录名称。

然后您可以使用该 File 实例。

但如果你只是想阅读资源内容,你可以执行如下操作(无需获取URL 实例):

InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1")
Scanner scanner = new Scanner(new InputStreamReader(is, "utf-8"));
try {
    if (scanner.hasNextLine()) {
        System.out.println(scanner.nextLine());
    }
} finally {
    scanner.close();
}

此示例假定您的文件是文本文件并且至少有一行。它将该行打印到控制台。

【讨论】:

  • 我编辑了这个问题,因为这是我尝试过的其他代码。谢谢。
猜你喜欢
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多