我假设您要读取的文件是您的类路径上的真正资源,而不仅仅是您可以通过new File("path_to_file");
.
尝试以下使用ClassLoader
,其中resource
是String
类路径中资源文件路径的表示形式。
String
的有效值resource
可以包括:
"foo.txt"
"com/company/bar.txt"
"com\\company\\bar.txt"
"\\com\\company\\bar.txt"
并且路径不限于com.company
获取File
不在 JAR 中的相关代码:
File file = null;
try {
URL url = null;
ClassLoader classLoader = {YourClass}.class.getClassLoader();
if (classLoader != null) {
url = classLoader.getResource(resource);
}
if (url == null) {
url = ClassLoader.getSystemResource(resource);
}
if (url != null) {
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
file = new File(url.getPath());
}
}
} catch (Exception ex) { /* handle it */ }
// file may be null
或者,如果您的资源在 JAR 中,您将不得不使用 Class.getResourceAsStream(resource);
并循环使用文件BufferedReader
来模拟对readLines()
.