我需要在应用程序中捕获一些目录。为此,我有一个小小的演示:
String pkgName = TestClass.class.getPackage().getName();
String relPath = pkgName.replace(".", "/");
URL resource = ClassLoader.getSystemClassLoader().getResource(relPath);
File file = new File(resource.getPath());
System.out.println("Dir exists:" + file.exists());
从IDE运行应用程序时,我收到了目标,我可以找到我的目录。但是将应用程序作为JAR文件运行,不会返回有效的"文件" (从Javas的角度来看)和我的sout让我回来File exists:false
。有没有办法获得这个文件?在这种情况下,该文件是一个目录。
答案 0 :(得分:0)
Java ClassPath是一种与文件系统抽象不同的抽象。 classpath元素可以以两种物理方式存在:
不幸的是,如果classpath指向文件系统, file.getPath 会返回File对象,但如果引用JAR文件则不会返回。
在99%的情况下,您应该使用 InputStream 来阅读资源的内容。
以下是一个代码段,它使用apache commons-io中的 IOUtils 将整个文件内容加载到字符串。
public static String readResource(final String classpathResource) {
try {
final InputStream is = TestClass.class.getResourceAsStream(classpathResource);
// TODO verify is != null
final String content = IOUtils.toString(
is, StandardCharsets.UTF_8);
return content;
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}