이것은 달성하고자하는 것입니다 : 1) zip 파일에 추가 할 모든 파일의 체크섬을 계산하십시오. 현재 IO는 다음 아파치 커먼스 사용 :자바에서 압축 해제 후 파일 검사 합계를 보존
final Checksum oChecksum = new Adler32();
...
//for every file iFile in folder
long lSum = (FileUtils.checksum(iFile, oChecksum)).getValue();
//store this checksum in a log
2) 앤트 압축 작업을 사용하여 우편으로 처리 폴더 압축.
final Checksum oChecksum = new Adler32();
...
ZipFile myZip = new ZipFile("test.zip");
ZipArchiveEntry zipEntry = myZip.getEntry("checksum.log"); //reads the filename from the log
BufferedInputStream myInputStream = new BufferedInputStream(myZip.getInputStream(zipEntry));
File destFile = new File("/mydir", zipEntry.getName());
lDestFile.createNewFile();
FileUtils.copyInputStreamToFile(myInputStream, destFile);
long newChecksum = FileUtils.checksum(destFile, oChecksum).getValue();
I 가지는 문제는 값이다 : 3) 상기 추출 된 파일의 체크섬을 모두 가공 IO 및이를위한 압축)을 사용하여 (특정 폴더에 의해 압축 된 하나의 파일을 추출하고, 계산 newChecksum의 원본 파일과 일치하지 않습니다. 파일의 크기가 디스크에서 일치합니다. 재미있는 점은 터미널에서 두 파일 모두에 대해 cksum 또는 md5sum 명령을 직접 실행하면 두 파일에서 모두 동일하다는 것입니다. 불일치는 java에서만 발생합니다.
올바른 방법인가요? 아니면 추출 후 체크섬 값을 유지할 수있는 방법이 있습니까?
또한 CheckedInputStream을 사용하여 시도했지만이 또한 java에서 다른 값을 가져옵니다.
편집 : 이것은 사용 된 Adler32 개체 (사전 압축 대 압축 해제 검사)와 관련이있는 것으로 보입니다. 모든 Adler32를 재사용하는 대신 모든 파일의 압축 해제 검사에서 "new Adler32()"를 수행하면 올바른 결과를 얻습니다.
오른쪽 ... 이것은 전체적인 문제였습니다. 리셋을 사용하거나 새 인스턴스를 사용하면 원하는 것을 반환합니다. 감사! – Dan