我使用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()
可以获取文件的内容。但我想知道文件的类型。
答案 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)创建一个新的文件系统然后你可以直接与Path
和File
合作。