如何在jar中导入文件?

时间:2017-05-05 17:23:03

标签: java jar classloader

我有这个项目,它有这个结构

Home
 graphics
    field.txt
    example.java

我需要在jar中的example.java中加载field.txt并使用:

getClass().getClassLoader().getResource("field.txt").toUri();

但这段代码它给了我"空指针异常" 。任何人都可以帮助我?

3 个答案:

答案 0 :(得分:0)

要读取文件,它必须在classpath中,您可以将文件放在包含.class文件的文件夹中,或者使用java -cp选项将其添加到类路径中。

答案 1 :(得分:0)

example.class.getResource(“/graphics/field.txt“);

该类应该属于同一个jar。对于Class.getResource,可以使用相对的“field.txt”(相同的包)。使用ClassLoader,可以寻找所有类路径的绝对路径:“graphics / field.txt”。

要立即阅读(从不写)使用getResourceAsStreamgetResource的URI。可以在URI上使用Path。 Files.copy(...)

不可能至少不应该写一个资源文件(因为它可以驻留在jar jar:file://...中; jar甚至可以被密封;资源可能被jvm缓存)。将其保留为只读模板。永远不会File

一种方法是在System.getProperty("user.home")中创建一个名为directory的应用程序,并在那里复制模板。

答案 2 :(得分:0)

问题不是你的代码,而是你如何构建和打包你的jar文件。你将不得不澄清你目前如何建立你的jar(使用ant,maven,eclipse等?)。

许多文章还建议您将资源与源代码(.java)分开,许多IDE将允许您将文件夹标记为资源文件夹,从而支持此分离方法。即使是maven也可以让你自定义它。

参见以下文章: