java zip文件系统读取zip条目



SO,根据我所收集的信息,应该能够从java7及更高版本的zip创建文件系统。我正在尝试,最终目标是使用File对象并访问这些文件,就像我访问了一个解压缩的文件一样。

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.*;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class MainZipTest {
public static void main(String[] args) throws IOException, URISyntaxException {
Map<String, String> env = new HashMap<>();
env.put("read", "true");
File file = new File("C:/pathtoazip/data.zip");
URI uri = file.toURI();
String path = "jar:" + uri;
FileSystem fs = FileSystems.newFileSystem(URI.create(path), env);
for (Path p : fs.getRootDirectories()) {
System.out.println("root" + p);
//says "/"
System.out.println(new File(p.toString()).exists());
for (File f : new File(p.toString()).listFiles())
System.out.println(f.getAbsolutePath());
//lists the contents of my c drive!
}

System.out.println(new File("somefile.txt").exists());
System.out.println(fs.getPath("somefile.txt").toFile().exists());
System.out.println(new File("/somefile.txt").exists());
System.out.println(fs.getPath("/somefile.txt").toFile().exists());
}
}

它全部打印";false";。我在这里做错了什么?或者我认为我可以通过File对象访问这些文件,这是错误的吗?如果是,如何访问它们?

Path是作为File(磁盘文件(的推广而引入的。路径可以位于zip文件、URL等文件中。

您可以将FilesPath用于类似的"文件"功能。

for (Path p : fs.getRootDirectories()) {
System.out.println("root: " + p);
System.out.println(Files.exists(p));
Files.list(p).forEach(f -> System.out.println(f.toAbsolutePath()));
}

请注意,Path(类似于zip(将维护其实际的文件系统视图(fs,zip(。

因此,请避免使用File。

最新更新