我正在尝试读取流并将读取的图像保存到一个 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/