지금까지 볼 수 있듯이 How to split a huge zip file into multiple volumes?은 지금까지 아카이브 크기를 추적하고 몇 가지 임의의 값 (최대 값보다 낮아야 함)에 도달하면 새 파일을 시작하기로 결정합니다. 따라서 16MB 제한의 경우 값을 10MB로 설정하고 도달 할 때마다 새 우편 번호를 시작할 수 있습니다. 그러나 9MB에 도달하고 다음 파일이 8MB로 줄어들면 제한보다 큰 우편 번호로 끝납니다.
ZipEntry가 만들어지기 전에 1) 크기가 있으므로 항상 0과 2) zip을 쓰지 않았기 때문에 해당 게시물에 주어진 코드가 나에게 적합하지 않은 것처럼 보였습니다. 내가 잘못했다면 알려주세요.
다음은 저에게 적합합니다. 간단히하기 위해 Wrapper에서 꺼내어 모든 것을 main (String args [])에 넣었습니다. 이 코드는 여러 부분 zip 파일을 만들 수있는 좋은 라이브러리가
import java.util.zip.*;
import java.io.*;
public class ChunkedZipTwo {
static final long MAX_LIMIT=10 * 1000 * 1024; //10MB limit - hopefully this
public static void main(String[] args) throws Exception {
String[] files = {"file1", "file2", "file3"};
int i = 0;
boolean needNewFile = false;
long overallSize = 0;
ZipOutputStream out = getOutputStream(i);
byte[] buffer = new byte[1024];
for (String thisFileName: files) {
if (overallSize > MAX_LIMIT) {
out.close();
i++;
out = getOutputStream(i);
overallSize=0;
}
FileInputStream in = new FileInputStream(thisFileName);
ZipEntry ze = new ZipEntry(thisFileName);
out.putNextEntry(ze);
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.closeEntry();
in.close();
overallSize+=ze.getCompressedSize();
}
out.close();
}
public static ZipOutputStream getOutputStream(int i) throws IOException {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("bigfile" + i +".zip"));
out.setLevel(Deflater.DEFAULT_COMPRESSION);
return out;
}
}
인터넷에서 시도한 몇 가지 예는 무엇입니까? 네가 그 (것)들을 시도 할 때 무엇이 일어 났는가? –
http://stackoverflow.com/questions/11084823/filenotfoundeception-no-such-file-or-directory 이것은 내가 처음 수정 한 실수 였지만 이제는 2 개가 더 생겨났습니다. 첫 번째 문제는 나는 ZipEntry의 크기를 설정할 수없고 두 번째 것은 내가 파일 압축을 풀려고 할 때 '압축 방법이 지원되지 않습니다'라는 오류가 발생합니다. – androidu
ZipEntry 논리 값을 설정할 수 없기 때문에 작동하지 않아 항상 하나의 아카이브 만 만듭니다. – androidu