有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringBootResourceLoader遍历jar包中的文件

我使用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) 个答案

  1. # 1 楼答案

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

    我不确定您的最终目标是什么,但对于从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探测文件与目录,或者为jar的内容(FileSystems.newFileSystem)创建一个新的文件系统,然后您可以直接使用PathFile