Javaでtarファイルを操作する
Javaでtarファイルを操作する場合には、Commons Compressを使用するのが簡単そうです。Commons Compresは他にもbzip2やgzipにも対応しています。サイトのサンプルとJavadocを見ればだいたいの使い方はわかると思いますが。
File[] filesToArchive = {file1, file2} File tarFile = new File("C:\\temp\\foo.tar"); TarArchiveOutputStream out = new TarArchiveOutputStream(new FileOutputStream(tarFile)); for(File f : filesToArchive){ out.putArchiveEntry(new TarArchiveEntry(f, f.getName())); out.write(org.apache.commons.io.FileUtils.readFileToByteArray(f)); out.closeArchiveEntry(); } out.close();
tarがファイルのユーザ情報やパーミッションなどのヘッダ情報を保持できるため、TarArchiveEntryのコンストラクタにFileオブジェクトを渡すことで、追加するファイルを元にエントリのヘッダ情報を生成しています*1。ヘッダ情報はバイト列などからも指定可能です。
TarArchiveInputStream in = new TarArchiveInputStream(new FileInputStream(C:\\temp\\foo.tar")); assertEquals(file1.getName(), in.getNextTarEntry().getName()); assertEquals(file2.getName(), in.getNextTarEntry().getName()); assertNull(in.getNextTarEntry()); // ファイルは2個だけ