spring boot ResourceLoader遍历jar包中的文件

时间:2018-03-06 10:20:59

标签: java spring spring-boot jar filenotfoundexception

我使用spring的ResourceLoader来遍历jar中的文件。但我想知道文件的类型(目录或文件)。

Resource resource = defaultResourceLoader.getResource(templatePathPrefix + File.separator + templateSourcePath);
    File templateSourceFile = null;
    try {
         //throws java.io.FileNotFoundException:
        templateSourceFile = resource.getFile();
    } catch (IOException e) {
        e.printStackTrace();
        throw new IllegalStateException("Cannot find file " + resource, e);
    }
 if (templateSourceFile.isDirectory()) {
    System.out.println("it is directory");
 } else {
    System.out.println("it is just file");
 }

我知道:

resource.getInputStream() 

可以获取文件的内容。但我想知道文件的类型。

1 个答案:

答案 0 :(得分:2)

Spring的ResourceLoader用于为类路径,文件系统,Web等上的资源创建资源处理程序。 它的目的不是遍历jar文件的内容并探测文件vs目录。

我不确定你最终目标是什么,但对于来自ResourceLoader的单个加载资源,您可以执行以下操作:

String filename = resource.getFilename();
String type = URLConnection.guessContentTypeFromName(resource.getFilename());

将为您提供从扩展名中猜到的文件类型。

遍历Jar条目

为了遍历所有jar条目,您必须在运行时加载jar文件并执行以下操作:

    //String or File handler to JAR file
    JarFile jar = new JarFile(file);
    Enumeration<JarEntry> entries = jar.entries();

    while (entries.hasMoreElements()) {
        JarEntry jarEntry = entries.nextElement();
        System.out.println(jarEntry.getName() + ": " + jarEntry.isDirectory());
    }

    jar.close();

另一种方法是将jar文件作为Zip打开并使用ZipEntry来探测文件vs目录,或者为Jar的内容(FileSystems.newFileSystem)创建一个新的文件系统然后你可以直接与PathFile合作。