Olası Çoğalt:
Appending files to a zip file with JavaJava'da varolan bir zip dosyasına nasıl girişler ekleyebilirim?
bir ZipOutputStream dosyayı açma bunu üzerine yazar. Dosyayı tutmanın ve yeni girişler eklemenin bir yolu var mı?
Olası Çoğalt:
Appending files to a zip file with JavaJava'da varolan bir zip dosyasına nasıl girişler ekleyebilirim?
bir ZipOutputStream dosyayı açma bunu üzerine yazar. Dosyayı tutmanın ve yeni girişler eklemenin bir yolu var mı?
Varolan dosyadaki tüm ZipEntry nesnelerini numaralandırmak için zipFile.entries() yöntemini kullanabilir ve bunları tümüyle ZipOutputStream öğesine ekleyebilir ve sonra da yeni girişlerinizi ek olarak ekleyebilirsiniz.
Bu işlev, varolan bir zip dosyasını geçici bir dosyaya yeniden adlandırır ve yeni dosyalardan biriyle aynı ada sahip olan zip girişleri hariç olmak üzere, varolan zip içindeki tüm girdileri yeni dosyalar ile birlikte ekler. İşte
public static void addFilesToExistingZip(File zipFile,
File[] files) throws IOException {
// get a temp file
File tempFile = File.createTempFile(zipFile.getName(), null);
// delete it, otherwise you cannot rename your existing zip to it.
tempFile.delete();
boolean renameOk=zipFile.renameTo(tempFile);
if (!renameOk)
{
throw new RuntimeException("could not rename the file "+zipFile.getAbsolutePath()+" to "+tempFile.getAbsolutePath());
}
byte[] buf = new byte[1024];
ZipInputStream zin = new ZipInputStream(new FileInputStream(tempFile));
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
ZipEntry entry = zin.getNextEntry();
while (entry != null) {
String name = entry.getName();
boolean notInFiles = true;
for (File f : files) {
if (f.getName().equals(name)) {
notInFiles = false;
break;
}
}
if (notInFiles) {
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(name));
// Transfer bytes from the ZIP file to the output file
int len;
while ((len = zin.read(buf)) > 0) {
out.write(buf, 0, len);
}
}
entry = zin.getNextEntry();
}
// Close the streams
zin.close();
// Compress the files
for (int i = 0; i < files.length; i++) {
InputStream in = new FileInputStream(files[i]);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(files[i].getName()));
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
// Complete the ZIP file
out.close();
tempFile.delete();
}
zip arşivleri değiştirme konusunda JavaWorld bir detailed article olduğunu.
Sıkıştırılmamış dosyalar için bir zip dosyasına eklenmiş bir CRC32 eklediğinizden emin olmalısınız. Buradaki örneğe bakın. http://jcsnippets.atspace.com/java/input-output/create-zip-file.html
Bize sahip olduklarınızı gösterebilir misiniz? –
Zip dosyalarının sonunda bir "merkezi dizin" var, bu yüzden onlara eklenmek kolay değil. –