Q&A
お世話になっております。
javaでファイルの圧縮する方法をZipOutputStreamを使って実装しようと試みております。
昨日、単体ファイルのみファイルの圧縮を行うようにできました。
本日から複数ファイルを指定して一つのzipに圧縮しようと試みてります。
【メソッドを呼びだし、圧縮します。】
zipFile=圧縮先の指定
fileOrigin=圧縮元の指定
files[] = 圧縮元のしたいファイルの名前(formから1~3つのファイル名が取得される)
NewName = files[]の名前を変更したいときに使う
// 複数ファイルのzip化 public static boolean zipDownload(String zipFile, String fileOrigin, String[] files, String[] NewName) { byte[] buf = new byte[1024]; boolean PresenceFlag = false; try { // 圧縮先ファイルへのストリームを開く ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); for (int i = 0; i < files.length; i++) { String inArgs = fileOrigin + files[i]; // 圧縮元ファイルへのストリームを開く BufferedInputStream in = new BufferedInputStream(new FileInputStream(inArgs)); //ファイルの名前変更がない if(NewName[i] == ""){ // エントリを作成する ZipEntry entry = new ZipEntry(files[i]); out.putNextEntry(entry); PresenceFlag = true; //ファイルの名前変更がある }else{ // エントリを作成する ZipEntry entry = new ZipEntry(NewName[i]); out.putNextEntry(entry); PresenceFlag = true; } // データを圧縮して書き込む 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(); } return PresenceFlag; }
現在、これを動かすとfiles1~3のファイル指定をMAXの3つを送信するとちゃんと動くのですが
1~2つのファイル名指定だとエラーになってしまいます。
【サンプルフォーム】
<form method="POST" action="/updownload-2016/menu/download"> <p>ディレクトリ名</p> <input type="text" name="dName" /> <br></br> <br></br> ファイル名の入力 : <input type="text" name="dFile" /> ファイル名の変更⇒ <input type="text" name="dNameNew" /> <br></br> <br></br> ファイル名の入力 : <input type="text" name="dFile2" /> ファイル名の変更⇒ <input type="text" name="dNameNew2" /> <br></br> <br></br> ファイル名の入力 : <input type="text" name="dFile3" /> ファイル名の変更⇒ <input type="text" name="dNameNew3" /> <br></br> <br></br> <input type="submit" value="ダウンロード" /> </form>
ずいぶん長く悩みましたが、正解が見つからなかったので、質問させていただきました。
わかりにくかったら申し訳ありませんが、どなたかご教示いただけたら幸いです。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。