Je dois ajouter un fichier de configuration à un fichier tar existant. J'utilise apache.commons.compress bibliothèque. L'extrait de code suivant ajoute l'entrée correctement mais écrase les entrées existantes du fichier tar.Ajouter une entrée à un fichier tar sans écraser son contenu existant
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();
}
Lors de la vérification du goudron, seul fichier « activeSensor.cfg » a été trouvé et le contenu initial du goudron se trouve manquante. Le "mode" n'est-il pas réglé correctement?
@biggusjimmusMerci –
Merci. J'ai fait le changement ci-dessus. Le contenu de tar est conservé mais la nouvelle entrée (activeSensor.cfg) n'est pas ajoutée au tar. Suis-je quelque chose avec le chemin ou l'argument passé au constructeur TarArchiveEntry? –
J'utilisais cette approche avant d'aller chercher ici. Semble que cela provoque l'entrée à mettre au-delà de la fin de l'archive tar, donc j'obtiendrais une erreur à cet effet, mais mon nouveau fichier ne serait pas là. – froggythefrog