![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちわ。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(セキュリティ) PDFファイルのパスワード設定について 1 2022/06/25 10:10
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
ファイル名にドットを使ったフ...
-
ファイルが開かれているかどう...
-
#include <Windows.h>というヘ...
-
.NETアプリを作ったときの .man...
-
Latexで図番号だけを「図1.1」...
-
CSSを1ページに1枚作るのって変...
-
binファイルを解凍したいの...
-
warファイルをEclipseでプロジ...
-
自分で作成した重要ファイルを...
-
リンクの張り付けかたを教えて...
-
バッチ処理で追記コピーしたい
-
exeファイルが作れない(windows10)
-
jarファイル
-
ラッパーって何なんでしょう・...
-
officeアプリケーションで作成...
-
コマンドプロンプトで作成日時...
-
C言語---ファイルに出力したデ...
-
他のMDBのマクロを実行する方法
-
ADODB.Streamで開いたファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
#include <Windows.h>というヘ...
-
binファイルを解凍したいの...
-
Latexで図番号だけを「図1.1」...
-
.NETアプリを作ったときの .man...
-
C言語---ファイルに出力したデ...
-
exeファイルをデータ転送サービ...
-
Word VBA MSGBOX 内で降順表示
-
jarファイル
-
公文書のxmlファイルの開き方が...
-
参照するファイルをワイルドカ...
-
コマンドプロンプトで、指定し...
-
パイソンでpy ファイルと p...
-
exeファイルの中身を見る方法は...
-
コマンドプロンプトで作成日時...
-
ハッシュ値を取る時はファイル...
-
CSSを1ページに1枚作るのって変...
-
実行ファイル(.exeファイル)...
-
バッチ処理で追記コピーしたい
-
自分で作成した重要ファイルを...
おすすめ情報