No.4ベストアンサー
- 回答日時:
その現象とプログラムから、 ava = bis.available() 得た ava と、 bis.read(bs); でbsに読み込んだバイト数とに齟齬がある(読み込んだバイト数の方が1少ない)のではないだろうか、と予測します。
そこで、 InputStream.availavle のマニュアルを読みます。
http://docs.oracle.com/javase/jp/6/api/java/io/I …
> この入力ストリームのメソッドの次の呼び出しによって、ブロックせずにこの入力ストリームから読み込むことができる (またはスキップできる) 推定バイト数を返します。(略) 読み込むまたはスキップするバイト数が少なくなることがあります。
ということで、bs[ava]と確保したものを全て書き出すのは問題がありそうです。
と思って検索の続きを見ると、まったく同じ問題について書かれたブログが見付かりました。
> [Java]zipファイルの解凍ではまる(ファイル末尾にヌル文字が1バイトできる)
http://daybreaksnow.hatenablog.jp/entry/2013/10/ …
available は参考程度にして、readの戻り値で正確に何バイト読んだかを求めて、writeでも正確にそのバイト数だけ書きだすのがよいようです。
No.2
- 回答日時:
実行環境もプログラムも無しに正確な判断はできません。
ありがちな物で予想するなら、xlsxをASCIIモードで書き出している、というあたりが疑われます。
まず、元のzipが正しいかどうか確認するために。
(1)元のxlsxが正常に読めるか、Excelで開いて確認する。(保存終了すると内容が変わってしまうので、保存はしないで閉じる)
(2)他のZIPツールで解凍する。
(3)(2)で解凍したxlsxと。圧縮元のxlsxが等しいか確認する。(バイナリーファイル比較ツールを使う)
以上で、ZIP自体に問題が無い、と確認できたら
(4)あなたのプログラムで解凍したxlsx と、元のxlsxが等しいか確認する。(バイナリーファイル比較ツールを使う)
(4)で比較した内容によって
・先頭とか末尾とかが増えている→余計なものまで出力してしまっている
・0x0Aや0x0Dが増えたり減ったりしている→ ASCIIモードでの書き出し。あるいは、改行付きでの書き出し
・ぜんぜん違う→根本的に何か間違えている
とかが考えられます
この回答への補足
環境等提示せずに質問したにも関わらず、丁寧な回答ありがとうございます。
環境
java1.7
バイナリ比較ツールで比較した結果は
解凍後のファイルの末尾に「00」が常についておりました。
コードは以下になります。
何か問題がありますでしょうか?
/**
* Zipファイル解凍
*
* @param String 解凍するファイルパス
* @param String 解凍ファイル格納フォルダパス
* @param boolean すでに解凍フォルダパスが存在した場合中身を空にするか trueで消す。
* @return List 解凍後出力パスファイルのリスト
*/
public List<String> decompressionZipFile(String inputPath, String outputPath,boolean outPutPathDellFlg) throws Exception{
org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(inputPath,"MS932");
File decoPath = new File(outputPath);
ArrayList<String> returnList = new ArrayList<String>();
if(!decoPath.isDirectory()){
//作成
decoPath.mkdir();
}else{
if(outPutPathDellFlg){
//中身削除する。
delFolderAllFile(outputPath);
}
}
Enumeration<? extends org.apache.tools.zip.ZipEntry> entries = zipFile.getEntries();
while (entries.hasMoreElements()) {
org.apache.tools.zip.ZipEntry ze = entries.nextElement();
//出力先ファイル
File outFile = new File(decoPath, ze.getName());
if (ze.isDirectory()) {
outFile.mkdirs();
} else {
returnList.add(outFile.getPath());
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
InputStream is = zipFile.getInputStream(ze);
bis = new BufferedInputStream(is);
if (!outFile.getParentFile().exists()) {
// ディレクトリ作成
outFile.getParentFile().mkdirs();
}
// 出力先OutputStreamを作成。
bos = new BufferedOutputStream(new FileOutputStream(outFile));
//書込
int ava;
while ((ava = bis.available()) > 0) {
byte[] bs = new byte[ava];
// 入力
bis.read(bs);
// 出力
bos.write(bs);
}
bos.flush();
bis.close();
bos.close();
}
}
zipFile.close();
return returnList;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) PDFファイルのパスワード設定について 1 2022/06/25 10:10
- ドライブ・ストレージ 空き容量があるのに「空き容量が足りません」と表示されてしまう 7 2022/09/10 21:56
- Android tar.ファイルのインストールについて知りたいです 2 2022/07/23 15:34
- Windows 10 Windows ZIPファイルを解凍してフォルダ内のテキスト文書を編集して上書き保存したいのにCtr 4 2023/06/21 13:14
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Windows 10 e-Gov 電子申請について 回答お願いします。 社会保険保険証加入手続きを電子申請しました。 返戻 3 2022/10/02 09:05
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/05/23 15:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
容量の大きいzipファイルの解凍...
-
AndroidでZip Extractorで解凍...
-
ゲームMODのpakファイルを開けない
-
アーカイブファイルではありません
-
○○.7z.001~●●.7z.003という圧...
-
マンガミーヤの機能拡張について
-
Lhaplusの解凍に一部エラーがで...
-
.pakファイルを見るには?
-
Boothというところでダウンロー...
-
7zファイルの解凍 001 002…
-
解凍した後のZIPファイルっ...
-
会社のメールで、 よその会社か...
-
googleフォト→USB
-
アーカイブファイルの破損
-
7zipデータ解凍時-ファイル○○は...
-
自己解凍書庫が開かない
-
Subversionのサーバー移行で悩...
-
PAK.EXE (.pak) Quake Pakの使...
-
ファイルの先頭よりも前にファ...
-
ソフトを解凍しようとしてもで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
容量の大きいzipファイルの解凍...
-
ゲームMODのpakファイルを開けない
-
会社のメールで、 よその会社か...
-
○○.7z.001~●●.7z.003という圧...
-
JW-CADでTIFF画像が表示されない
-
googleフォト→USB
-
解凍した後のZIPファイルっ...
-
アーカイブファイルではありません
-
.pakファイルを見るには?
-
リドルジョーカーのダウンロー...
-
マンガミーヤの機能拡張について
-
winrarで複数ファイルを一括で...
-
Boothというところでダウンロー...
-
ファイルの先頭よりも前にファ...
-
zipファイルの解凍
-
空き容量があるのに「空き容量...
-
RAR形式の動画ファイルを再生で...
-
mayaの入れ方
-
「ファイルの形式が不明なため...
-
7zip 右クリックのメニューを...
おすすめ情報