2011-03-19 17 views
11

Java programımdan bir zip dosyası oluşturmalıyım.java kütüphanesi Zip dosyalarıyla çalışma

Zip dosyaları oluşturabilen ve içindeki metin ve dosyadaki kayıtları saklayabilen bir kütüphaneye ihtiyacım var ve en önemli şey, dizinin tamamını depolayabilmesidir (Diğer dizinlerin çeşitli düzeylerine sahip bir dizin) bunların her birinde bazı dosyalar var).

bana da önerebilirsiniz?

cevap

9
Zip dosyalarını (yani sıkıştırma) taşıma zor kısmı yapmak için bir kütüphane Java SE hakkı inşa edilmiştir

(java.util.zip): En üst düzey işlevler için

http://download.oracle.com/javase/1.5.0/docs/api/java/util/zip/package-summary.html

bunlar olmazdı muhtemelen az 50 satır kod ya da öylesine - sert olduğunu yinelemeli bir dizin çapraz ve ZipOutputStream içine dosyaları kopyalamak için bazı işlevler yazmak için.

http://www.javareference.com/jrexamples/viewexample.jsp?id=108 de iyi bir örnek var - bu tek dosya Yapacak biraz ihtiyacı var. Bu tür alanlarda

+0

Ama java.util.zip bir dizinin tamamını kaydedemezsiniz ve ben kendim yazmak gerekiyor! – RYN

+0

true, dizin yapısını geçmek ve "ZipOutputStream" inin içine bir şeyler atmanız gerekiyor. – Alnitak

+0

btw, bu örnek, borkludur. Bazı önemli derleme sorunları var (örneğin, dizindeki dosyaları düzgün şekilde yineleme gibi). – stevebot

4

, genellikle (: Apache Commons belki ya da daha spesifik) Apache'den göz önünde bir şey yoktur. Bunu buldum: http://commons.apache.org/compress/zip.html (Yine de kontrol etmedim).

+0

sadece "daha iyi" zip dosyaları yapmak gibi görünüyor, dizin geçişini içerecek gibi görünmüyor veya Aslında, disk dosyalarından zip dosyasına kopyalama yapmak için gereken her şey. – Alnitak

21

Kontrol dışarı Zip4j - http://www.lingala.net/zip4j/

Bugün bu sorunu koştu ettik ve ben JDK yapmamızı istediği gibi düşük seviyeli bok yapmayı reddettiler. Umarım bu küçük kütüphane ünlü 7zip kütüphanenin bağlayıcı bir Java vardır

+2

Hatta Maven üzerinden kullanılabilir: http://mvnrepository.com/artifact/net.lingala.zip4j/zip4j – ripper234

1

easyzip4j

de bunu kontrol github adresinden indirin yapabilirsiniz.

https://github.com/willwarren/easyzip4j/downloads

Kullanımı

EasyZip.zip("./folderToZip", "./myZipFile.zip"); 

VEYA

Bu (ayrıca Benioku'da https://github.com/willwarren/easyzip4j/blob/master/README.md kaplı)

EasyZip.zip("./folderToZip", "./myZipFile.zip", 
    new EasyZipParameters().setZipFolderContentsNotFolder(true)); 

bir maven tabanlı bir projedir.
Commons-io ve log4j'ye bağlıdır. Düzenlemek için çekinmeyin!

4

Çıkış yapabilmek Başka bir seçenek https://github.com/zeroturnaround/zt-zip

de Maven merkez ve proje sayfasından ulaşılabilecek zt-zip olduğunu It has standart ambalaj ve (dosya sistemi akışlarında ve üzerinde) açma işlevselliği + yardımcı yöntemler çok Arşivdeki dosyaları test etmek veya girişleri eklemek/kaldırmak için

+0

Çok fazla bağımlılık var ... ama güzel kod. – marcolopes

+0

Şu anda tek bağımlılık org.slf4j.slf4j-api – toomasr