Я использовал java.util.zip для архивирования файлов, пока не столкнулся с проблемами для файлов большого размера (> 2 ГБ). Я попытался перейти на truezip. Мне удалось успешно заархивировать файлы, но при извлечении я получаю ошибку «Ошибка проверки файла».
Вот код, используемый для архивирования файлов.
int BUFF_MAX_SIZE = 524288;
byte[] buf = new byte[BUFF_MAX_SIZE];
long time;
long size;
File fp;
String[] filenames = {"D:\\abc", "D:\\large file", "D:\\xyz"};
int n = filenames.length;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("archive.zip")), Charset.forName("UTF-8"));
for (int i = 0; i < n; i++) {
fp = new File(filenames[i]);
time = fp.lastModified();
size = fp.length();
try {
TFileInputStream in = new TFileInputStream(filenames[i]);
ZipEntry ze = new ZipEntry(filenames[i]);
ze.setTime(time);
ze.setSize(size);
out.putNextEntry(ze);
TFile.getDefaultArchiveDetector();
int len = 0;
collectCnt = 0;
while ((len = in.read(buf, 0, BUFF_MAX_SIZE)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.closeEntry();
} catch (Exception ex) {
//
}
}
try{
out.close();
} catch (Exception ex){
// error closing outout stream.
}