Ich habe viele BufferedImages im Speicher generiert und möchte sie in eine Zip-Datei komprimieren, bevor ich sie als E-Mail-Anhang sende. Wie speichere ich die Dateien in eine Zip ohne Dateien von der Festplatte zu lesen.Wie kann ich eine Zip-Datei ohne Speichern auf der Festplatte mit Java generieren?
Gibt es eine Möglichkeit, diese Dateien zu komprimieren, ohne eine temporäre Datei zu erstellen?
Das Schreiben auf die Festplatte ist zeitaufwendig, da Tausende von Dateien erstellt werden.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cccprog;
import java.awt.Component;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
/**
*
* @author Z
*/
public class N {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
JFrame jf = new JFrame();
Panel a = new Panel();
JRadioButton birdButton = new JRadioButton();
birdButton.setSize(100, 100);
birdButton.setSelected(true);
jf.add(birdButton);
getSaveSnapShot(birdButton, i + ".bmp");
}
}
public static BufferedImage getScreenShot(Component component) {
BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
// paints into image's Graphics
component.paint(image.getGraphics());
return image;
}
public static void getSaveSnapShot(Component component, String fileName) throws Exception {
BufferedImage img = getScreenShot(component);
// BufferedImage img = new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
// write the captured image as a bmp
ImageIO.write(img, "bmp", new File(fileName));
}
}
Schauen Sie sich java.utli.zip an. –
Nur für meine Neugier, warum möchten Sie vermeiden, eine temporäre Datei zu erstellen? –
Dies scheint verwandt http://stackoverflow.com/questions/7108035/how-to-flush-the-zipoutputstream-periodically-in-java – Ted