기존 tar 파일에 구성 파일을 추가해야합니다. 나는 apache.commons.compress 라이브러리를 사용하고 있습니다. 다음 코드 조각은 항목을 올바르게 추가하지만 tar 파일의 기존 항목을 덮어 씁니다. 타르 확인에기존 내용을 덮어 쓰지 않고 항목을 tar 파일에 추가하십시오.
public static void injectFileToTar() throws IOException, ArchiveException {
String agentSourceFilePath = "C:\\Work\\tar.gz\\";
String fileToBeAdded = "activeSensor.cfg";
String unzippedFileName = "sample.tar";
File f2 = new File(agentSourceFilePath+unzippedFileName); // Refers to the .tar file
File f3 = new File(agentSourceFilePath+fileToBeAdded); // The new entry to be added to the .tar file
// Injecting an entry in the tar
OutputStream tarOut = new FileOutputStream(f2);
TarArchiveOutputStream aos = (TarArchiveOutputStream) new ArchiveStreamFactory().createArchiveOutputStream("tar", tarOut);
TarArchiveEntry entry = new TarArchiveEntry(fileToBeAdded);
entry.setMode(0100000);
entry.setSize(f3.length());
aos.putArchiveEntry(entry);
FileInputStream fis = new FileInputStream(f3);
IOUtils.copy(fis, aos);
fis.close();
aos.closeArchiveEntry();
aos.finish();
aos.close();
tarOut.close();
}
만 "activeSensor.cfg"파일이 발견되고 타르의 초기 내용이 누락 발견된다. "모드"가 올바르게 설정되지 않았습니까?
@biggusjimmusThanks –
감사합니다. 나는 위의 변화를 만들었다. 타르 내용은 유지되지만 새로운 항목 (activeSensor.cfg)은 타르에 추가되지 않습니다. TarArchiveEntry 생성자에 전달 된 경로 또는 인수로 무언가를 엉망으로 만들고 있습니까? –
여기에서 검색하기 전에이 접근법을 사용하고있었습니다. 엔트리가 tar 아카이브의 끝 부분을 넘어서는 것처럼 보이기 때문에 그 결과에 오류가 발생하지만 새 파일은 거기에 없을 것입니다. – froggythefrog