- - PR -
Zipファイルの作り方って?
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2001-11-15 16:31
いま開発で複数のデータをひとつのファイルにZip形式で圧縮する
アプリケーションをつくっています。 イメージとしては [Folder] | +---[Data_1] | +---[Data_2] という感じです。 で、まとめるファイルの中に入るデータが1つだけなら 出来たのですが2つ以上になるとどうしても出来ません。 どなたか助けて頂けないでしょうか。 [ メッセージ編集済み 編集者: POLON 編集日時 2001-11-15 17:08 ] | ||||||||
|
投稿日時: 2001-11-15 17:08
java.util.zip.ZipOutputStream だか ZipFile だか作って、
ZipEntry をファイルごとに作ってつっこんでいく、 じゃだめなんでしょうか。 # わたしはやったことないですが。 | ||||||||
|
投稿日時: 2001-11-15 18:27
しょむさん。
早速のレスありがとうございます。 私もとりあえずこれらを使っているのですがどうも上手くいきません。 (私が下手なだけなんですが...。) 圧縮対象データはどれだけあるかわからないので Vectorに持たせて下記の圧縮実行部分に渡しております。 ---ここから------- // 各種宣言を行う FileInputStream[ ] flIptSt = new FileInputStream[ cnt ]; BufferedInputStream[ ] bfIptSt = new BufferedInputStream[ cnt ]; FileOutputStream flOptSt = null; ZipOutputStream[ ] zpOptSt = new ZipOutputStream[ cnt ]; ZipEntry[ ] target = new ZipEntry[ cnt ]; while( et.hasMoreElements( ) ) { Object obj = et.nextElement( ); System.out.println( "---[START]------------------------" ); /***** Object型DataをString型に変換 *****************/ objSt[ j ] = new String( obj.toString( ) ); System.out.println( "ObjectStream[" + j + "] => " + objSt[ j ] ); /****************************************************/ // 圧縮対象Fileに接続する flIptSt[ j ] = new FileInputStream( objSt[ j ] ); // 圧縮対象Fileを読み込む bfIptSt[ j ] = new BufferedInputStream( flIptSt[ j ] ); // ZipBoxを生成する flOptSt = new FileOutputStream( zipBox ); // ZipBox内に圧縮済Fileを書込む zpOptSt[ j ] = new ZipOutputStream( flOptSt ); zipFile[ j ] = new File( objSt[ j ] ); target[ j ] = new ZipEntry( zipFile[ j ].getPath() ); zpOptSt[ j ].putNextEntry( target[ j ] ); /*** ここが問題っ!! ***/ int count; byte buf[ ] = new byte[1536]; System.out.println( "COUNTER => " + cnt ); for( int h = 0; h < cnt; h++ ) { while( ( count = bfIptSt[ h ].read( buf, 0, 1536 ) ) != EOF ) { zpOptSt[ h ].write( buf, 0, count ); } bfIptSt[ h ].close( ); flIptSt[ h ].close( ); zpOptSt[ h ].closeEntry( ); zpOptSt[ h ].close( ); System.out.println( "--------------------------[END]---" ); } flOptSt.close(); j++; } ---ここまで------- ※一部省略しております。 汚いソースですがわかりますか? [ メッセージ編集済み 編集者: POLON 編集日時 2001-11-15 18:29 ] | ||||||||
|
投稿日時: 2001-11-15 21:14
私も圧縮するプログラムを作成したことがないので、よくわかりませんが
「Javaのからくり2」という本でgzip,zip,jarの圧縮について書かれていた いました。機会があったら読んでみてください。 「Javaのからくり2」 http://www.idg.co.jp/books/book/program/006/ | ||||||||
|
投稿日時: 2001-11-15 21:18
ぅぅ。Javaに見えない…(^^;
こんなに配列使う必要はないのでは。 なんか根本的にループ構造が違う気が。
前後するかもしれませんが。 [ メッセージ編集済み 編集者: しょむ 編集日時 2001-11-15 21:22 ] | ||||||||
|
投稿日時: 2001-11-16 10:24
でzpOptStを閉じては駄目なんではないでしょうか?閉じてしまっては次のエントリーが書き込めません。 あと、しょむさんの言われるようにループ構造が違うと思います。よく見ると、毎回zpOptSt[ j ] = new ZipOutputStream( flOptSt );ってしてますよね。これだと前のファイルが消されてしまうのではないでしょうか? すみません、ちょっとしょむさんのに付け足しです。
です。 | ||||||||
|
投稿日時: 2001-11-16 10:28
簡単なサンプルを作ってみました。固定のファイルしかZipできませんが参考になると思います。
↓サンプルコードを少し修正しました。最後にzipOut.close();を入れ忘れました。 [ メッセージ編集済み 編集者: H2 編集日時 2001-11-16 10:41 ] | ||||||||
|
投稿日時: 2001-11-16 10:57
しょむさん、@kotoさん、H2さん
貴重なご意見/ご指摘本当にありがとうございます。 Java(というよりもProgram自体)を独学で覚えた為 正直、あまり自信がなかったのですが勇気をだして Sourceを載せさせて頂きました。 これからこのProgramを作り直してみようと思うので 出来あがったらみなさん再度、見て頂けないでしょうか。 宜しくお願いします。 & これからもご指摘の方、宜しくお願い致します。 | ||||||||
