こんにちわ。
Javaの解凍処理について質問です。
Test.zipがあって、その中身が「テスト.xls」とした時、うまく解凍ができません。
Zipファイルの中身が日本語名ではなく、「Test.xls」であれば正常に解凍ができます。
下記の書き方では日本語名のファイルの入ったZipファイルを解凍することはできないのでしょうか?
どなたかご教授お願い致します。
String fname = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
ZipInputStream zis = null;
ZipEntry zent = null;
FileOutputStream fos = null;
try
{
fis = new FileInputStream(FilePath);
bis = new BufferedInputStream(fis);
zis = new ZipInputStream(bis);
byte[] buf = new byte[1024];
int len;
// アーカイブ中に含まれるファイル情報の取得
while ((zent = zis.getNextEntry()) != null) {
int intResult = zent.toString().indexOf(".");
int intLength = zent.toString().length();
//ファイル名の変更(フォルダ名+社員コード)StringBuffer BuffRename = new StringBuffer();
BuffRename.append("D:\\test\\");
BuffRename.append(zent.getName().substring(0,intResult));
BuffRename.append(SyainCd);
BuffRename.append(zent.getName().substring(intResult,intLength));
fname = BuffRename.toString();
//書き込みファイルをオープン
fos = new FileOutputStream(fname);
while (-1 != (len = zis.read(buf, 0, buf.length))) {
fos.write(buf, 0, len);
}
//★★★
fos.close();
}
Catch・finallyは省略
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1の方が書いておられる通り,java.util.ZipInputStreamはUTF-8にしか対応していないようです。
#試しにjarで,
#日本語(SJIS)エントリーをもつzipファイルを開いてみたところ,
#ZipInputStream.getNextEntry()から呼び出されている
#ZipIputStream.getUTF8String()というメソッドで
#IllegalArugumentExceptionが発生しました。
illusion_catさんがどういう目的でzipの解凍処理をjavaで書こうとしているのかがわからないので,役に立たないアドバイスかもしれませんが,解凍対象のzipファイルを自分で作るような状況であれば,作成時に日本語(SJIS等)のエントリー名をUTF-8に変換してzipファイルに格納し,解凍時にそれを元の文字コードに戻すようにする,というのが一つの方法として考えられます。
そうでなくもっと根本的な対処としては,例えば自分でZipInputStreamクラスを継承するクラス(例えばMyZipInputStream)をつくって,そこにZipEntry名の文字コードを指定できるgetNextEntryメソッド(例えばgetNextEntry(String charEncoding))を追加するという方法も考えられます。
MyZipInputStream.getNextEntry(String) の中身の処理は,zipファイルのフォーマットをベースに,Javaのソースを参考にして書いてみてはどうでしょうか?
No.1
- 回答日時:
こんばんわ。
サイト検索して以下の情報を見つけました。
ZipInputStreamはUTF-8固定で日本語名ファイルを解凍不可能です。
org.apache.tools.zip.ZipFile
ZipEntry、Enumeration取得
ZipFileにZipEntryを引数にしてファイルごとの解凍されたInputStreamが取り出せる。
とのことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jarファイル
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
#include <Windows.h>というヘ...
-
VBAでのicsファイル変換
-
公文書のxmlファイルの開き方が...
-
warファイルをEclipseでプロジ...
-
Easy言語を使ったファイルの検...
-
Seasar2のdiconファイルの読み方
-
jarファイルはzipファイルと同...
-
HTAのウィンドウを閉じるには・...
-
自分で作成した重要ファイルを...
-
Latexで図番号だけを「図1.1」...
-
VB6で特定のファイルを閉じたい
-
既に開いているエクセルを閉じ...
-
.NETアプリを作ったときの .man...
-
DreamWeaver MX 2004でファイル...
-
CRCが一致する確率
-
EXCEL VBA EXCEL2000で「ファイ...
-
アメブロで音声ファイルを貼る方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
.NETアプリを作ったときの .man...
-
exeファイルの中身を見る方法は...
-
jarファイル
-
自分で作成した重要ファイルを...
-
Seasar2のdiconファイルの読み方
-
VBAでのicsファイル変換
-
バッチ処理で追記コピーしたい
-
監視ツールを入れさせられまし...
-
参照するファイルをワイルドカ...
-
「ブルーファイル」と「グリー...
-
HTMLからのBATファイル実行
-
Latexで図番号だけを「図1.1」...
-
C言語---ファイルに出力したデ...
-
Windowsのエクスプローラーでフ...
-
warファイルをEclipseでプロジ...
おすすめ情報