Saya melihat perpustakaan Zip default yang datang dengan JDK dan lib kompresi Apache dan saya tidak senang dengan mereka karena 3 alasan:
Mereka bengkak dan memiliki desain API yang buruk. Saya harus menulis 50 baris output array byte boiler plate, input zip, file stream dan menutup stream yang relevan dan menangkap pengecualian dan memindahkan buffer byte sendiri ? Mengapa saya tidak dapat memiliki API sederhana yang terlihat seperti ini
Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)
danZipper.zip(File targetDirectory, String password = null)
itu berfungsi?Tampaknya membuka zip merusak file meta-data dan penanganan kata sandi rusak.
Juga, semua perpustakaan yang saya coba adalah 2-3x lambat dibandingkan dengan alat zip baris perintah yang saya dapatkan dengan UNIX?
Bagi saya (2) dan (3) adalah poin kecil tapi saya benar-benar ingin perpustakaan yang diuji dengan antarmuka satu baris.
sumber
Jawaban:
Saya tahu ini sudah terlambat dan ada banyak jawaban tetapi zip4j ini adalah salah satu perpustakaan terbaik untuk zipping yang saya gunakan. Sederhana (tanpa kode boiler) dan dapat dengan mudah menangani file yang dilindungi kata sandi.
Ketergantungan Maven adalah:
sumber
Dengan Apache Commons-IO 's
IOUtils
Anda dapat melakukan ini:Ini masih beberapa kode boilerplate, tetapi hanya memiliki 1 ketergantungan non-eksotis: Commons-IO
sumber
close()
itu normal tidak sakit.Ekstrak file zip dan semua subfoldernya, hanya menggunakan JDK:
File zip dan semua subfoldernya:
sumber
extractFolder(String zipFile,String extractFolder)
Opsi lain yang dapat Anda periksa adalah zt-zip tersedia dari Maven central dan halaman proyek di https://github.com/zeroturnaround/zt-zip
Ini memiliki fungsi pengemasan dan pembongkaran standar (pada aliran dan pada sistem file) + banyak metode pembantu untuk menguji file dalam arsip atau menambah / menghapus entri.
sumber
Implementasi penuh untuk Zip / Unzip Folder / File dengan zip4j
Unduh toples dari sini , dan tambahkan ke jalur build proyek Anda. Di
class
bawah ini dapat mengkompres dan mengekstrak file atau folder apa pun, dengan atau tanpa perlindungan kata sandi-sumber
Proyek yang sangat bagus adalah TrueZip .
Misalnya (dari situs web ):
sumber
Pilihan lain adalah JZlib . Dalam pengalaman saya, ini kurang "terpusat pada file" dari zip4J, jadi jika Anda perlu bekerja di gumpalan di-memori daripada file, Anda mungkin ingin melihatnya.
sumber
Ada contoh lengkap di sini untuk zip dan unzip file secara rekursif: http://developer-tips.hubpages.com/hub/Zipping-and-Unzipping-Nested-Directories-in-Java-using-Apache-Commons-Compress
sumber
Apakah Anda sudah melihat http://commons.apache.org/vfs/ ? Ia mengklaim untuk menyederhanakan banyak hal untuk Anda. Tapi saya tidak pernah menggunakannya dalam proyek.
Saya juga tidak mengetahui lib kompresi Java-Native selain JDK atau Apache Compression.
Saya ingat sekali kita merobek beberapa fitur dari Apache Ant - mereka memiliki banyak utilitas untuk kompresi / dekompresi bawaan.
Kode sampel dengan VFS akan terlihat seperti:
sumber