- PR -

0バイトファイルを含む複数ファイルの圧縮について

1
投稿者投稿内容
LUKIA
会議室デビュー日: 2004/11/16
投稿数: 2
投稿日時: 2004-11-16 17:56
はじめまして。
表記の件で行き詰ってます、教えてください。

複数のファイルを圧縮しています。
圧縮の際に1ファイルずつバイト数をバッファに読み込んでいきますが、
圧縮対象のファイルに0バイトファイルがあった場合に
次のエラーが出て、圧縮できません。
--------------------------------
java.lang.NullPointerException
java.lang.IllegalArgumentException: Buffer size <= 0
--------------------------------

File file = new File(zipfile); //zipfileは圧縮対象のファイルです。
int len = (int)file.length();
FileInputStream fis = new FileInputStream(zipfile);
BufferedInputStream bis = new BufferedInputStream(fis, len);
bis.read(buf, 0,len );
↑このbis.read(buf, 0,len ); で上記のエラーが出ます。

仕様上、空ファイルがあるときとないときがあり、
空ファイルであっても毎回同じファイル数で圧縮を行いたいのですが、
どうすればよいのでしょうか?
ご教示ください。
よろしくお願いいたします。
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2004-11-16 18:33
コード:
BufferedInputStream bis = new BufferedInputStream(fis, len); 

の部分ですが、APIリファレンスの java.io.BufferedInputstream#BufferedInputstream(java.io.InputStream,int) を見ると
引用:
IllegalArgumentException - size が 0 以下の場合

とありますので、それが原因でインスタンスが生成されていないのでしょう。
とりあえず adhoc な解決で良いのでしたら
コード:
BufferedInputStream bis = new BufferedInputStream(fis, Math.max(1,len));

とでもしておけばよいと思います。
LUKIA
会議室デビュー日: 2004/11/16
投稿数: 2
投稿日時: 2004-11-16 19:36
ありがとうございました。
無事うまくいきました。
Math.maxを使うなど考えつきませんでした。

また、APIリファレンスでreadメソッドばかり読んで
BufferedInputstreamの詳細を読んでませんでした。
勉強になりました。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)