我已阅读有关此主题的每一个问题和答案,我已经尝试了大量建议的解决方案,其中没有一个正在运行,目前我正在尝试使用URL资源方法,但url始终返回null。这是我目前的伪设置:
/src/java/pkg/name/is/long/meatpackage/MyClassFile.java
/src/java/pkg/name/is/long/meatpackage/myresources/myresourcefile.txt
@SuppressWarnings("rawtypes")
Class thisClass = Class.forName("pkg.name.is.long.meatpackage.MyClassFile");
ClassLoader cLoader = thisClass.getClassLoader();
//note, I have tried a plethora of variations to the path for the file, this is just one example
URL url = cLoader.getResource("pkg/name/is/long/meatpackage/myresources/myresourcefile.txt");
System.out.println("Found the file!!: " + url);
说真的,在jar中包含一个文本文件并在运行时访问它是不是很难?
当我列出jar时,它显示文件位于pkg / name / is / log / meatpackage / myresources / myresourcefile.txt。
我尝试的另一种方法是:
//along with multiple path combinations for the file the InputStream is always null.
//multiple paths include but are not limited to:
// "pkg/name/is/long/meatpackage/myresources/myresourcefile.txt"
// "/pkg/name/is/long/meatpackage/myresources/myresourcefile.txt"
// "/myresources/myresourcefile.txt"
// "/myresourcefile.txt"
// "myresourcefile.txt"
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("myresourcefile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
答案 0 :(得分:0)
您可以使用getClass()。getResourceAsStream()或MyClassFile.getResourceAsStream()来简化此操作 - 您无需直接与类加载器通信。
请注意,资源名称是斜杠分隔的,如果您指定/那么它来自JAR的根目录或类路径的基础,否则它隐含地来自与该类相同的包目录。
例如:
package com.example; 公共课Foo { 静态的 { Foo.class.getResourceAsStream( “跳回到bar.txt”); //查找/com/example/bar.txt Foo.class.getResourceAsStream( “/跳回到bar.txt”); //寻找/bar.txt } }
如果您正在Eclipse内部开发,请注意getResourceAsStream
仅查看已编译的输出目录(即bin
中的任何内容)。因此,如果您的资源不在那里,请将其复制到src
目录中(因此在构建时将其复制到bin
目录)并且应该正确找到它。