Zip 파일이 있는데 그 안에 하나의 파일을 다른 파일로 바꾸고 싶습니다. 따라서 zip 항목을 지울 필요가 없습니다. 단지 zip 항목의 파일을 다른 항목으로 대체하십시오.Java에서 압축을 풀지 않은 채로 Zip 파일 바꾸기
다음은 내가 시도한 것입니다.
public void replaceConfigurationFile(ZipFile zipFile, ZipOutputStream zos, String pathToNewFile, String configFileToReplaced)
throws IOException {
String zipEntryName;
for(Enumeration<?> e = zipFile.entries(); e.hasMoreElements();) {
ZipEntry entryIn = (ZipEntry) e.nextElement();
zipEntryName = entryIn.getName();
if(zipEntryName.endsWith(configFileToReplaced)) {
FileInputStream fis = new FileInputStream(pathToNewFile);
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
} else {
zos.putNextEntry(entryIn);
InputStream is = zipFile.getInputStream(entryIn);
byte [] buf = new byte[1024];
int len;
while((len = (is.read(buf))) > 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
}
} // enf of for
}
나는라는 이름의 파일 압축 항목이 있습니다
WEB-INF/classes/config/app-dev.yml
을 나는 나는에있는 파일을 복사 할 수 있어요 위치
D:/app-dev.yml
에서 위치 D 드라이브에서 파일이 바꾸려는 파일을 대체하여 다른 zip 파일. 하지만 실제로는 필요하지 않습니다 (다른 파일을 만들 때). 그럼 파일을 내 사용자 지정 파일로 바꾸려면 어떻게해야합니까?
Stackoverflow에서 다른 게시물을 검색했지만 필요한 항목을 찾을 수 없습니다. 그 zip 항목을 삭제할 수는 없지만 그것을 대체하는 것은 어떨까요? 제발 도와주세요
예 대체 할 파일의 크기는 바이트 수와 다릅니다. 그러나 그렇습니다 차이가있을 것입니다. 그래서 어떻게 바꿀 수 있습니까? 우리는 파일을 대체 할 수있는 방법이 없다는 것을 의미합니까 (크기가 항상 달라지기 때문에) –
정확히 : 더 큰 데이터를위한 공간을 만들기 위해 파일의 나머지 데이터를 복사하는 코드는 다음과 같습니다. 단순히 다음보다 더 복잡합니다 : 1) 위에서 보여준 것을하십시오; 2) 이전 파일을 삭제합니다. 3) 새 파일의 이름을 바꿉니다. –
5 개의 구성 파일이 있고 zip 파일 크기가 170MB이므로 압축 파일을 다섯 번, 5 X 170MB 파일로 생성하므로 대용량 파일을 5 번 생성하고 바꾸고 이름을 바꾼다는 것은 매우 비효율적입니다. –