2017-05-05 73 views
0

我有这个项目,它具有这种结构如何在jar中导入文件?

Home 
graphics 
    field.txt 
    example.java 

我需要在我的罐子example.java加载field.txt我用:

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

但是这个代码它给我“空指针异常“。任何人都可以帮助我?

+1

你可能会发现你的答案在这里的http:// stackoverflow.com/questions/20389255/reading-a-resource-file-from-within-jar –

+0

这看起来很奇怪,通常项目没有主目录。 。 – strash

+0

检查你的jar文件文件是否真的在那里,或者它缺少构建 –

回答

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

该类应该属于同一个罐子。对于Class.getResource,可以使用相对的“field.txt”(相同的包)。使用ClassLoader时,所有类路径的绝对路径将被搜索:“graphics/field.txt”。

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


我们不能,至少不应该)写一个资源文件(因为它可以驻留在一个罐子jar:file://...;和jar甚至可能被密封;和资源可能被JVM缓存)。将其保持为只读模板。从不File

一种技术是在System.getProperty("user.home")创建一个名为目录的应用程序和复制的模板在那里。

+0

是和如果我想把结果放到:File f = new File(example.class.getResource(“/ graphics/field.txt “));这样不行吗? – ddd

+0

添加了一些文字。不幸的是,我不明白你希望将数据导入资源中,这些资源是作为只读文件使用的。抱歉 –

0

要阅读它必须在类路径的文件,可以把文件夹中包含的.class文件或将其与java命令选项添加到类路径。

0

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

许多文章也建议您将资源从源代码(的.java)分离出来,许多IDE将通过允许您标记一个文件夹作为一个资源文件夹照片直接支持这种分离。即使maven可以让你自定义这个。

请参见下面的文章: