java - 如何将图像保存到 zip 文件中

标签 java image zip

我正在尝试读取流并将读取的图像保存到一个 zip 文件中,因为这将运行多天并且会生成太多的单个文件。

我现在遇到一个问题,我似乎无法将图像保存到 zip 文件中。我为它构建的工作线程在下面。我确定图像正在写入 ImageIO.write。然而,最后的结果是一个空 jpg 的 zip 文件。我想知道 ImageIO 是否没有将属性写入 ZipOutputStream。

感谢您的帮助。

public class ZipSaveWorker implements Runnable{

    public static ZipOutputStream out=null;
    BufferedImage myImage;
    private static int counter=0;



    public void run() {
        ZipEntry entry=new ZipEntry("video"+counter+".jpg");
        counter++;
        try {
            out.putNextEntry(entry);
            ImageIO.write(myImage, ".jpg", out);

        } catch (IOException ex) {
            Logger.getLogger(ZipSaveWorker.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public ZipSaveWorker(BufferedImage image)
    {
        if (out==null)
        {
            try {
                out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(new File("images" + File.separator + "video.zip"))));
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ZipSaveWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
            counter=0;
        }

        myImage=image;

    }

    public static void closeStream()
    {
        try {
            out.flush();
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(ZipSaveWorker.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


}

最佳答案

您的代码中的错误在行中:

ImageIO.write(myImage, ".jpg", out);

应该是:

ImageIO.write(myImage, "jpg", out);

我也不确定是否应该在每张图像写入后调用 closeEntry()。

想想 Stephen C 写的,如果断电或虚拟机死机,这段代码可能会导致 zip 文件损坏。考虑每周对 zip 文件进行几次备份,甚至一天几次,以确保您的多天运行不会完全毁掉(我假设运行可以恢复)。

关于java - 如何将图像保存到 zip 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428396/

相关文章:

image - 从不同订阅下创建的镜像创建 Azure VM

javascript - Twitter Web 应用程序的图像共享(API?)

arrays - 如何在 swift 4 中枚举一个 zip 数组以获取每个对象的索引

powershell - 在 Powershell 4 中压缩和解压缩文件

java - 安卓 ZipInputStream : only DEFLATED entries can have EXT descriptor

java - JBoss MBean : How to have an array attribute?

java - 使用 ParameterExpression 作为 In 子句的一部分

java - 在 POM 中为 Maven 指定路径

java - 执行线程中出现 "java.lang.OutofMemoryError"的可能原因是什么?

java - 如何使用 NetBeans GUI Builder for Java Swing 添加 GridLayout?