我有这个项目,它有这个结构
Home
graphics
field.txt
example.java
我需要在jar中的example.java中加载field.txt并使用:
getClass().getClassLoader().getResource("field.txt").toUri();
但这段代码它给了我"空指针异常" 。任何人都可以帮助我?
答案 0 :(得分:0)
要读取文件,它必须在classpath中,您可以将文件放在包含.class文件的文件夹中,或者使用java -cp选项将其添加到类路径中。
答案 1 :(得分:0)
example.class.getResource(“/graphics/field.txt“);
该类应该属于同一个jar。对于Class.getResource,可以使用相对的“field.txt”(相同的包)。使用ClassLoader,可以寻找所有类路径的绝对路径:“graphics / field.txt”。
要立即阅读(从不写)使用getResourceAsStream
或getResource
的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也可以让你自定义它。
参见以下文章: