Saya memiliki file teks dinamis yang mengambil konten dari database sesuai dengan permintaan pengguna. Saya harus menulis konten ini ke dalam file teks dan zip di folder di servlet. Bagaimana saya harus melakukan ini?
149
Lihatlah contoh ini:
StringBuilder sb = new StringBuilder();
sb.append("Test String");
File f = new File("d:\\test.zip");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));
ZipEntry e = new ZipEntry("mytext.txt");
out.putNextEntry(e);
byte[] data = sb.toString().getBytes();
out.write(data, 0, data.length);
out.closeEntry();
out.close();
Ini akan membuat zip di root D:
bernama test.zip
yang akan berisi satu file tunggal yang disebut mytext.txt
. Tentu saja Anda dapat menambahkan lebih banyak entri zip dan juga menentukan subdirektori seperti ini:
ZipEntry e = new ZipEntry("folderName/mytext.txt");
Anda dapat menemukan informasi lebih lanjut tentang kompresi dengan Java di sini .
byte[] data = sb.toString().getBytes(); out.write(data, 0, data.length);
termasuk dalam contoh kode ini? Apa tujuan merekasb.toString().getBytes()
ke file ZIP, saya berharap Anda ingin itu berisi byte dari file yang Anda zipkan? Atau apakah saya melewatkan sesuatu?Java 7 memiliki ZipFileSystem bawaan, yang dapat digunakan untuk membuat, menulis dan membaca file dari file zip.
Java Doc: Penyedia ZipFileSystem
sumber
.zip
? Saya perlu menulis.foo
file, yang diformat persis seperti file zip, tetapi dengan ekstensi yang berbeda. Saya tahu saya bisa membuat.zip
file dan mengganti nama, tetapi hanya membuatnya dengan nama yang tepat akan lebih mudah.jar:file:
awalan untuk membuat URI.pathInZipfile
variabel, Anda perlu membuat 'dir' di dalam arsip .zip. Untuk ini, tambahkan saja baris berikutnya:Files.createDirectories(pathInZipfile.getParent())
sebelum memanggilFiles.copy
metode.Untuk menulis file ZIP, Anda menggunakan ZipOutputStream. Untuk setiap entri yang ingin Anda tempatkan ke file ZIP, Anda membuat objek ZipEntry. Anda meneruskan nama file ke konstruktor ZipEntry; itu menetapkan parameter lain seperti tanggal file dan metode dekompresi. Anda dapat mengganti pengaturan ini jika mau. Kemudian, Anda memanggil metode putNextEntry dari ZipOutputStream untuk mulai menulis file baru. Kirim data file ke aliran ZIP. Setelah selesai, panggil closeEntry. Ulangi untuk semua file yang ingin Anda simpan. Berikut ini kerangka kode:
sumber
Berikut adalah contoh kode untuk mengkompres Direktori Utuh (termasuk sub file dan sub direktori), menggunakan fitur walk file tree dari Java NIO.
Untuk menggunakan ini, telepon saja
dan Anda akan mendapatkan direktori file zipToCompress.zip
sumber
Spring boot controller, zip file dalam direktori, dan dapat diunduh.
sumber
sumber
Ini adalah bagaimana Anda membuat file zip dari file sumber:
sumber
File tunggal:
Banyak file:
sumber
Anda harus membuat dua fungsi. Pertama adalah writeToZipFile () dan yang kedua adalah createZipfileForOutPut .... dan kemudian panggil createZipfileForOutPut ('nama file .zip') `...
sumber
Jika Anda ingin dekompresi tanpa perangkat lunak lebih baik gunakan kode ini. Kode lain dengan file pdf mengirimkan kesalahan pada dekompresi secara manual
sumber
Karena butuh beberapa saat untuk mengetahuinya, saya pikir akan sangat membantu untuk memposting solusi saya menggunakan Java 7+ ZipFileSystem
sumber
sumber
Diberikan
exportPath
danqueryResults
sebagai variabel String, blok berikut membuatresults.zip
file di bawahexportPath
dan menulis kontenqueryResults
keresults.txt
file di dalam zip.sumber
Menggunakan Jeka https://jeka.dev JkPathTree, ini cukup mudah.
sumber
Ada opsi lain dengan menggunakan
zip4j
di https://github.com/srikanth-lingala/zip4jMembuat file zip dengan file tunggal di dalamnya / Menambahkan file tunggal ke zip yang ada
new ZipFile("filename.zip").addFile("filename.ext");
Ataunew ZipFile("filename.zip").addFile(new File("filename.ext"));
Membuat file zip dengan banyak file / Menambahkan banyak file ke zip yang ada
new ZipFile("filename.zip").addFiles(Arrays.asList(new File("first_file"), new File("second_file")));
Membuat file zip dengan menambahkan folder ke dalamnya / Menambahkan folder ke zip yang ada
new ZipFile("filename.zip").addFolder(new File("/user/myuser/folder_to_add"));
Membuat file zip dari stream / Menambahkan aliran ke zip yang ada
new ZipFile("filename.zip").addStream(inputStream, new ZipParameters());
sumber