Java - 从jar获取文件

时间:2018-01-10 11:01:08

标签: java file jar ide

我需要在应用程序中捕获一些目录。为此,我有一个小小的演示:

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。有没有办法获得这个文件?在这种情况下,该文件是一个目录。

1 个答案:

答案 0 :(得分:0)

Java ClassPath是一种与文件系统抽象不同的抽象。 classpath元素可以以两种物理方式存在:

  1. 使用指向根目录的类路径进行爆炸
  2. 打包在JAR档案
  3. 不幸的是,如果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);
        }
    }