Javaでtar.gzファイルの解凍を行いたいのですが、可能でしょうか?
可能であれば参考となるサイトや資料、サンプルなどいただけるとありがたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
最近似たようなのを少しやったので・・
argiusさんのAnt.jar使ったらこんな感じでしょうか。
java
1import java.io.File; 2import java.io.FileInputStream; 3import java.io.FileOutputStream; 4import java.io.IOException; 5import java.util.zip.GZIPInputStream; 6 7import org.apache.tools.tar.TarEntry; 8import org.apache.tools.tar.TarInputStream; 9 10public class Main { 11 12 public static void main(String[] args) throws Exception { 13 14 uncompress("hogehoge.tar.gz"); 15 16 } 17 18 /* 19 * tar形式のファイルを解凍する 20 * @String path 解凍したいtarファイルのパス 21 * 22 */ 23 private static void uncompress(String path) throws IOException { 24 25 TarInputStream tin = new TarInputStream(new GZIPInputStream(new FileInputStream(new File(path)))); 26 27 for(TarEntry tarEnt = tin.getNextEntry(); tarEnt != null; tarEnt = tin.getNextEntry()) { 28 File tarFile = new File(tarEnt.getName()); 29 if(tarEnt.isDirectory()){ 30 new File(tarEnt.getName()).mkdir(); 31 } 32 else { 33 FileOutputStream fos = new FileOutputStream(new File(tarEnt.getName())); 34 tin.copyEntryContents(fos); 35 //TODO tarEnt.getMode()から適切な権限をセットする 36 //実行権をセット 37 tarFile.setExecutable(true, false); 38 //読込権限をセット 39 tarFile.setReadable(true, false); 40 //書込み権限をセット 41 tarFile.setWritable(true, false); 42 } 43 //更新日時をセット 44 tarFile.setLastModified(tarEnt.getModTime().getTime()); 45 } 46 tin.close(); 47 } 48}
Unix系OSの場合は特に実行権を引き継ぐ必要があります。
- エラー処理
- ディレクトリの更新日付のセット
- 適切な権限セット
- 適切なGroupIdとuserのセット
- Symboliclink
いろいろとやることはありますね・・・
投稿2015/12/10 03:17
総合スコア206
0
http://d.hatena.ne.jp/wistery_k/20120208/1349073069
上記のサイトではtarの操作にAnt内のorg.apache.tools.tar.TarInputStream
クラスを使用していますが、Commons Compressのorg.apache.commons.compress.archivers.tar.TarArchiveInputStream
で代替できるでしょう。
投稿2015/12/09 06:22
編集2015/12/09 07:11退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Antに含まれている機能を使って展開する方法です。
別途、Antをダウンロードして、そのjarファイルをクラスパスに通してください。
javaでtar.gz書庫を展開する - #define int ll
http://d.hatena.ne.jp/wistery_k/20120208/1349073069
投稿2015/12/09 06:18
総合スコア9388
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
http://d.hatena.ne.jp/wistery_k/20120208/1349073069
http://javatec.blog105.fc2.com/blog-entry-13.html
サンプルコードが提示されてありますね。
参考にしてください。
投稿2015/12/09 06:16
総合スコア801
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。