Wenn meine Anwendung die Ergebnisdateien (Gruppe von Dateien) mit Java dynamisch komprimieren will, welche Optionen gibt es in Java? Wenn ich geblättert habe Ich habe java.util.zip-Paket zu verwenden, aber gibt es eine andere Möglichkeit, wo ich es verwenden kann, um zu implementieren?Zip und entpacken Sie die Ordner und Dateien mit Java
6
A
Antwort
0
können Sie ZIP-Datei verwenden, Bibliothek der Handhabung auch mit JDK kommt this Tutorials könnte hilfreich sein.
15
public class FolderZiper {
public static void main(String[] a) throws Exception {
zipFolder("c:\\a", "c:\\a.zip");
}
static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
}
static private void addFileToZip(String path, String srcFile, ZipOutputStream zip)
throws Exception {
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
} else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
}
}
static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip)
throws Exception {
File folder = new File(srcFolder);
for (String fileName : folder.list()) {
if (path.equals("")) {
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
} else {
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
}
}
}
}
3
Die ursprüngliche Java-Implementierung hat bekanntlich einige Fehler im Zusammenhang mit der Dateicodierung. Zum Beispiel kann es Dateinamen mit Umlauten nicht richtig behandeln.
TrueZIP ist eine Alternative, die wir in unserem Projekt verwendet haben: https://truezip.dev.java.net/ Überprüfen Sie die Dokumentation auf der Website.
0
Java haben eine java.util.zip.ZipInputStream und zusammen mit diesem können Sie ZipEntry ... So etwas wie
public static void unZipIt(String zipFile, String outputFolder){
File folder = new File(zipFile);
List<String> files = listFilesForFolder(folder);
System.out.println("Size " + files.size());
byte[] buffer = new byte[1024];
try{
Iterator<String> iter = files.iterator();
while(iter.hasNext()){
String file = iter.next();
System.out.println("file name " + file);
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
String fileName = ze.getName();
File newFile = new File(outputFolder + File.separator + fileName);
System.out.println("file unzip : "+ newFile.getAbsoluteFile());
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
System.out.println("Done");
}
}catch(IOException ex){
ex.printStackTrace();
}
}
verwenden http://devharbor.blogspot.com/2009/01/create-zip -archive-in-java.html und Google – ant
danke für Ihren Code – gmhk