ZipEntry转换为文件

12

有没有直接将java.util.zip.ZipEntry解压到File中的方法?

我想指定一个位置(比如“C:\temp\myfile.java”),然后将该Entry解压到该位置。

网络上有一些使用流的代码,但我更喜欢使用测试过的库函数。


1
“...to a File?” File 是路径名的抽象表示。你是指“文件”(没有代码标记)吗? - T.J. Crowder
一个平均的函数,我给它一个文件,它会将该条目解压到抽象路径名。 - J Fabian Meier
3
如果我的表达不清楚或者是重复的,请评论而不是直接投反对票,非常抱歉。 - J Fabian Meier
3个回答

31
使用 ZipFile 类
    ZipFile zf = new ZipFile("zipfile");

获取入口

    ZipEntry e = zf.getEntry("name");

获得输入流

    InputStream is = zf.getInputStream(e);

节省字节

    Files.copy(is, Paths.get("C:\\temp\\myfile.java"));

6
使用以下代码将“zip文件”提取到文件中,然后使用ZipEntry将其添加到列表中。希望这能帮到你。
private List<File> unzip(Resource resource) {
    List<File> files = new ArrayList<>();
    try {
        ZipInputStream zin = new ZipInputStream(resource.getInputStream());
        ZipEntry entry = null;
        while((entry = zin.getNextEntry()) != null) {
            File file = new File(entry.getName());
            FileOutputStream  os = new FileOutputStream(file);
            for (int c = zin.read(); c != -1; c = zin.read()) {
                os.write(c);
            }
            os.close();
            files.add(file);
        }
    } catch (IOException e) {
        log.error("Error while extract the zip: "+e);
    }
    return files;
}

1
使用ZipInputStream通过迭代使用getNextEntry()方法来移动到所需的ZipEntry。然后使用ZipInputStream.read(...)方法读取当前ZipEntry的字节。将这些字节输出到指向您选择的文件的FileOutputStream中。

这意味着:不,没有库函数? - J Fabian Meier
是的,@JFMeier,没错,有很多Java没有的库函数。 - Acuna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接