お世話になっております。
現在、javaを使ってサーバに置いてあるファイルを圧縮しようとしております。
【やりたいこと】
1.javaを使用
2.同期元のファイル名とドキュメントルートから見た相対パスでディレクトリを指定
3.2で指定されたファイルを圧縮して、同期先のディレクトリに作成
検索していると、[ZipOutputStream]というもの使うと良い、といくつかでてきました。
以下、検索の中でわかりやすかったので試しているサンプルプログラムです。
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; class ZipOutputStreamSample { /** * @param args [0]圧縮先ファイル、[1,2...]圧縮元ファイル */ public static void main(String[] args) { byte[] buf = new byte[128]; try { // 圧縮先ファイルへのストリームを開く ZipOutputStream out = new ZipOutputStream(new FileOutputStream(args[0])); for (int i = 0; i < args.length - 1; i++) { System.out.println("Add to zip from " + args[i + 1] + "."); // 圧縮元ファイルへのストリームを開く BufferedInputStream in = new BufferedInputStream(new FileInputStream(args[i + 1])); // エントリを作成する ZipEntry entry = new ZipEntry(args[i + 1]); out.putNextEntry(entry); // データを圧縮して書き込む int size; while ((size = in.read(buf, 0, buf.length)) != -1) { out.write(buf, 0, size); } // エントリと入力ストリームを閉じる out.closeEntry(); in.close(); } // 出力ストリームを閉じる out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
大変見やすいコードで早速試しているのですが、以下が困っております。
⓵【圧縮したいファイル名とその同期元ディレクトリ(ドキュメントルートから見た相対パス】と
⓶【圧縮したzipの同期先ディレクトリ(ドキュメントルートから見た相対パス】】
サンプルコードのargs[0]に⓵を、args[1]に⓶を指定して
実行したのですが、⓵のファイルが圧縮されて⓶に作成されていませんでした。
そもそもこのサンプルはそういった事をするためのものではないのでしょうか・・・
できるできないのご指摘か、他に似たようなサンプルを頂けたら幸いです。
以上、よろしくお願いいたします。
【追記】
申し訳ありません。改めてパスの指定をしたところ、圧縮されたzipが目的のディレクトリに作成いたしました!
しかし、解凍してみると、相対パス指定をしたためか、ディレクトリを含めた圧縮になっていました。
例:
⓵ /test/test2/ZipFile.txt
⓶ /test/test3/ZipFile.zip
⓶にできたZipFile.zipを解凍すると testディレクトリから始まったものでした。
これをZipFile.zipだけ圧縮するにはどうしたらよいのか、ご教示いただけたら幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/19 05:53
2016/10/19 06:06
2016/10/19 06:11
2016/10/19 06:18
2016/10/19 06:34