- - PR -
Zipファイルの作り方って?
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2001-11-16 14:26
こんにちは。
みなさんの助言のおかげでなんとか作成できました。 そこでまたまた懲りずSourceを載っけてご指摘を受けたいと思います。 --- ここから -------------------------- /******************************************************************** 目標:中に複数のDataを入れたZip形式のFileを作成する。 手順:?外部からDataを取得→Vectorに新規(追加)登録 [理由]File中に入れる圧縮対象Dataが何個あるかわからないので。 :?Fileの名前を設定する [理由]DLする時、同名にならないようにする為。 :?必要(圧縮対象Dataがある)な分だけRoopさせる [理由]圧縮対象DataをFile内に書き込む為。 :?Fileを閉じる ********************************************************************/ import java.io.*; import java.util.*; import java.util.zip.*; public class ZipMaker { /***** 圧縮Folder生成DirectoryのPath **************/ protected static String putDir = "./CompressedDir"; /**************************************************/ /***** 各種宣言 *****************************/ protected static final int EOF = -1; protected static int i,j = 0; protected static Vector vctData = new Vector( ); protected static Calendar makedDat = null; protected static File zipBox = null; protected static Object obj = new Object( ); protected static String objSData = null; protected static ZipEntry objZData = null; protected static int count = 1536; protected static byte[ ] buff = new byte[1536]; /********************************************/ public static void main( String[ ] args ) throws Exception { // Calendar情報の初期化 makedDat = Calendar.getInstance( ); while( i < args.length ) { // 取得したDataをVectorに新規/追加登録 vctData.addElement( args[ i ] ); } /***** Zip形式File「zipBox」の名称設定 ************ // File名は「 YYYYMMDD_HHMMSS.zip 」で出力する。 ***************************************************/ int YEARs = makedDat.get( Calendar.YEAR ); // 年 int MONTHs = makedDat.get( Calendar.MONTH ) + 1; // 月 int DAYs = makedDat.get( Calendar.DAY_OF_MONTH );// 日 int HOURs = makedDat.get( Calendar.HOUR_OF_DAY ); // 時 int MINUTEs = makedDat.get( Calendar.MINUTE ); // 分 int SECONDs = makedDat.get( Calendar.SECOND ); // 秒 zipBox = new File( putDir + "/" + YEARs + "" + MONTHs + "" + DAYs + "_" + HOURs + "" + MINUTEs + "" + SECONDs + ".zip" ); /**************************************************/ ZipOutputStream zipOutSt = new ZipOutputStream( new FileOutputStream( zipBox ) ); // zipBox出力Streamを作り出す FileInputStream fileInputSt = null; // Vector内のDataを生成する Enumeration et = vctData.elements( ); // et内のData数分まわす while( et.hasMoreElements( ) ) { // et内の次のDataを引き出しObjectに代入する obj = et.nextElement( ); // Object型DataをString型Dataに変換 objSData = new String( obj.toString( ) ); // Zip entryを行う objZData = new ZipEntry( objSData ); // 書き込み開始 zipOutSt.putNextEntry( objZData ); // 圧縮対象DataのByte取得 fileInputSt = new FileInputStream( objSData ); while( fileInputSt.read( buff, 0, count ) != EOF ) { // File内に圧縮対象Dataを書き込む zipOutSt.write( buff, 0, count ); } zipOutSt.closeEntry( ); fileInputSt.close( ); } zipOutSt.close( ); } } --- ここまで -------------------------- TO しょむさん Roopの基本構造を解りやすく教えて頂いたので 大変参考になりました。 やはり本の例題だけでは"生きたProgramは作れない"っていうのが よく解りました。 これからは基本知識だけでなく応用の方法も覚えたいと思います。 TO @kotoさん 教えて頂いた書籍、早速読んでみました。 今回の課題であった「複数選択」は残念ながら掲載されていませんでしたが 基本的な構造を学べ、大変役に立ちました。 TO H2さん わざわざSourceを載せて、修正版まで見せて頂き納得致しました。 やはり直に見せて頂くと解りやすく、またCommentも簡潔に書いて頂いたので 大変感動いたしました。 みなさん、本当にありがとうございました。 私もJavaをMasterして皆さんの様にはやく他のProgramerにお役に立てられる様 がんばりたいと思いますので、「手間のかかるヤツ」ですがこれに懲りずに また質問した折には教えてくださいね。 宜しくお願い致します。m(__)m [ メッセージ編集済み 編集者: POLON 編集日時 2001-11-16 14:29 ] | ||||||||||||
|
投稿日時: 2001-11-16 15:10
なかなかうまくできてますね。あと圧縮率とか変えられると面白いかも。役に立ってとてもよかったです。私にとっても初めてjava.util.zipだったので、よい練習になりました。
3点だけ留意点です:
[ メッセージ編集済み 編集者: H2 編集日時 2001-11-16 15:12 ] [ メッセージ編集済み 編集者: H2 編集日時 2001-11-16 15:17 ] | ||||||||||||
|
投稿日時: 2001-11-16 16:31
TO H2さん
あぁ、なるほど。 確かにVector内のデータ数を確認するだけなら Enumerationを使わなくっても良かったのですね。 nextElement()を使おうと考えていた為に無駄な作業をしておりました。 あとRoopではなくLoopでしたね。(駅前留学してるのにぃ...。 | ||||||||||||
