org.apache.tools.zip を使用した Zip 圧縮・解凍
2022-02-19 11:21:56
<スパン
インポート
java.io.*;
インポート org.apache.tools.zip.*;
インポート java.util.Enumeration。
/**
* 機能:zip圧縮、解凍(中国語ファイル名対応)
*説明:このプログラムは、Apache Antで提供されるzipツール org.apache.tools.zipを用いてzip圧縮・解凍を実装しています。
* java.util.zipパッケージが漢字に対応していないことによる不具合を解消しました。
* java.util.zip パッケージを使用した場合、zip ファイル内に中国語名のファイルがある場合。
* スレッドで例外発生 "main " java.lang.IllegalArgumentException
* at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
*注
* 1.使用する際は、クラスパスに ant.jar を入れ、プログラム内で import org.apache.tools.zip.* を使用します。
* 2、Apache Antのダウンロードアドレス:[url]http://ant.apache.org/[/url]
* 3.AntのZIP API:[url]http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/[/url]
* 4.このプログラムは、Ant 1.7.1のant.jarを使用しています。
* プログラミングの学習用としてのみ使用できます。
*作者:Winty
*日付 2008年8月3日
*@Usage:
*圧縮:java AntZip -zip "ディレクトリ名"。
* 解凍:java AntZip -unzip "fileName.zip"。
*/
公開 クラス AntZip{
プライベート ZipFile zipFile;
プライベート ZipOutputStream zipOut; //Zip圧縮
プライベート ZipEntry zipEntry;
プライベート 静的 int bufSize; //バイトの大きさ
プライベート バイト [] buf;
プライベート int readedBytesです。
公開 AntZip(){
これ (512);
}
公開 AntZip( int bufSize){
これ .bufSize = bufSize;
これ .buf = 新しい バイト [ これ .bufSize]を参照してください。
}
// フォルダ内のファイルを圧縮する
公開 ボイド doZip(String zipDirectory){ <未定義 //zipDirectoryPath:圧縮されるフォルダー名
ファイルのファイルです。
ファイル zipDir。
zipDir = 新しい ファイル(zipDirectory)。
文字列 zipFileName = zipDir.getName() +. ".zip" ; //圧縮後に生成されるzipファイルの名前
試みる {
これ .zipOut = 新規 ZipOutputStream( 新しい バッファードアウトプットストリーム( 新しい FileOutputStream(zipFileName)))。
handleDir(zipDir , これ .zipOut)。
これ .zipOut.close()を実行します。
} キャッチ (IOExceptionのioe){。
ioe.printStackTrace()を実行します。
}
}
// doZip によって呼び出され、ディレクトリファイルの読み込みを再帰的に完了させる
プライベート ボイド handleDir(File dir , ZipOutputStream zipOut) スロー IOException{
FileInputStream fileIn;
ファイル[]ファイル
files = dir.listFiles();
もし (files.length == 0){ <未定義 //ディレクトリが空の場合、別途作成する。
//ZipEntry の isDirectory() メソッドでは、ディレクトリの末尾が "/" になっています。
<スパン これは .zipOut.putNextEntry()。 新しい ZipEntry(dir.toString() +) "/" ));
これ .zipOut.closeEntry()を実行します。
}
さもなくば { <未定義 // ディレクトリが空でない場合、ディレクトリとファイルを別々に処理する。
について (ファイル fileName : files){.
//System.out.println(fileName);
もし (fileName.isDirectory()){。
handleDir(fileName , この .zipOut)。
}
さもなくば {
ファイルイン = 新しい FileInputStream(fileName)。
これ .zipOut.putNextEntry() 新しい ZipEntry(fileName.toString()));
をしながら (( これ .readedBytes = fileIn.read() これ .buf))>0){。
これ .zipOut.write( これ .buf , 0 , これ .readedBytes)。
}
これ .zipOut.closeEntry()を実行します。
}
}
}
}
//指定されたzipファイルを解凍する
公開 ボイド unZip(StringのunZipfileName){。 <未定義 //unZipfileName 解凍する zip ファイルの名前です。
FileOutputStream fileOut;
ファイル file;
InputStream inputStream;
試みる {
これ .zipFile = 新規 ZipFile(unZipfileName)を使用します。
について (列挙項目 = これ .zipFile.getEntries(); entries.hasMoreElements(); ){。
ZipEntry entry = (ZipEntry)entries.nextElement();
ファイル = 新しい ファイル(entry.getName())。
もし (entry.isDirectory()){。
file.mkdirs()を実行します。
}
さもなくば {
// 指定されたファイルのディレクトリが存在しない場合、作成する。
ファイル parent = file.getParentFile();
もし (!parent.exists()){
parent.mkdirs()を実行します。
}
inputStream = zipFile.getInputStream(entry)。
fileOut = 新しい FileOutputStream(file)。
をしながら (( これ .readedBytes = inputStream.read()。 これ .buf) ) > 0){。
fileOut.write( これ .buf , 0 , これ .readedBytes )。
}
fileOut.close()を実行します。
inputStream.close()を実行します。
}
}
これ .zipFile.close()を実行します。
} キャッチ (IOExceptionのioe){。
ioe.printStackTrace()を実行します。
}
}
// バッファサイズを設定する
公開 ボイド setBufSize( int bufSize){
これ .bufSize = bufSize;
}
// AntZip クラスのテスト
公開 静的 ボイド main(String[] args) 投げる Exception{
もし (args.length==2){。
文字列名 = args[1];
AntZip zip = 新しい AntZip()を使用します。
もし (args[0].equals()の場合 zip" ))
zip.doZip(名前);
さもなくば もし (args[0].equals()の場合 解凍してください。 ))
zip.unZip(name)を実行します。
}
さもなくば {
System.out.println( 使用方法:"使用方法:" );
System.out.println( "zip:java AntZip -zip directoryName" );
System.out.println( "解凍:java AntZip -unzip fileName.zip" );
投げる 新しい 例外( 引数エラー!"引数エラー!" );
}
}
}
インポート org.apache.tools.zip.*;
インポート java.util.Enumeration。
/**
* 機能:zip圧縮、解凍(中国語ファイル名対応)
*説明:このプログラムは、Apache Antで提供されるzipツール org.apache.tools.zipを用いてzip圧縮・解凍を実装しています。
* java.util.zipパッケージが漢字に対応していないことによる不具合を解消しました。
* java.util.zip パッケージを使用した場合、zip ファイル内に中国語名のファイルがある場合。
* スレッドで例外発生 "main " java.lang.IllegalArgumentException
* at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
*注
* 1.使用する際は、クラスパスに ant.jar を入れ、プログラム内で import org.apache.tools.zip.* を使用します。
* 2、Apache Antのダウンロードアドレス:[url]http://ant.apache.org/[/url]
* 3.AntのZIP API:[url]http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/[/url]
* 4.このプログラムは、Ant 1.7.1のant.jarを使用しています。
* プログラミングの学習用としてのみ使用できます。
*作者:Winty
*日付 2008年8月3日
*@Usage:
*圧縮:java AntZip -zip "ディレクトリ名"。
* 解凍:java AntZip -unzip "fileName.zip"。
*/
公開 クラス AntZip{
プライベート ZipFile zipFile;
プライベート ZipOutputStream zipOut; //Zip圧縮
プライベート ZipEntry zipEntry;
プライベート 静的 int bufSize; //バイトの大きさ
プライベート バイト [] buf;
プライベート int readedBytesです。
公開 AntZip(){
これ (512);
}
公開 AntZip( int bufSize){
これ .bufSize = bufSize;
これ .buf = 新しい バイト [ これ .bufSize]を参照してください。
}
// フォルダ内のファイルを圧縮する
公開 ボイド doZip(String zipDirectory){ <未定義 //zipDirectoryPath:圧縮されるフォルダー名
ファイルのファイルです。
ファイル zipDir。
zipDir = 新しい ファイル(zipDirectory)。
文字列 zipFileName = zipDir.getName() +. ".zip" ; //圧縮後に生成されるzipファイルの名前
試みる {
これ .zipOut = 新規 ZipOutputStream( 新しい バッファードアウトプットストリーム( 新しい FileOutputStream(zipFileName)))。
handleDir(zipDir , これ .zipOut)。
これ .zipOut.close()を実行します。
} キャッチ (IOExceptionのioe){。
ioe.printStackTrace()を実行します。
}
}
// doZip によって呼び出され、ディレクトリファイルの読み込みを再帰的に完了させる
プライベート ボイド handleDir(File dir , ZipOutputStream zipOut) スロー IOException{
FileInputStream fileIn;
ファイル[]ファイル
files = dir.listFiles();
もし (files.length == 0){ <未定義 //ディレクトリが空の場合、別途作成する。
//ZipEntry の isDirectory() メソッドでは、ディレクトリの末尾が "/" になっています。
<スパン これは .zipOut.putNextEntry()。 新しい ZipEntry(dir.toString() +) "/" ));
これ .zipOut.closeEntry()を実行します。
}
さもなくば { <未定義 // ディレクトリが空でない場合、ディレクトリとファイルを別々に処理する。
について (ファイル fileName : files){.
//System.out.println(fileName);
もし (fileName.isDirectory()){。
handleDir(fileName , この .zipOut)。
}
さもなくば {
ファイルイン = 新しい FileInputStream(fileName)。
これ .zipOut.putNextEntry() 新しい ZipEntry(fileName.toString()));
をしながら (( これ .readedBytes = fileIn.read() これ .buf))>0){。
これ .zipOut.write( これ .buf , 0 , これ .readedBytes)。
}
これ .zipOut.closeEntry()を実行します。
}
}
}
}
//指定されたzipファイルを解凍する
公開 ボイド unZip(StringのunZipfileName){。 <未定義 //unZipfileName 解凍する zip ファイルの名前です。
FileOutputStream fileOut;
ファイル file;
InputStream inputStream;
試みる {
これ .zipFile = 新規 ZipFile(unZipfileName)を使用します。
について (列挙項目 = これ .zipFile.getEntries(); entries.hasMoreElements(); ){。
ZipEntry entry = (ZipEntry)entries.nextElement();
ファイル = 新しい ファイル(entry.getName())。
もし (entry.isDirectory()){。
file.mkdirs()を実行します。
}
さもなくば {
// 指定されたファイルのディレクトリが存在しない場合、作成する。
ファイル parent = file.getParentFile();
もし (!parent.exists()){
parent.mkdirs()を実行します。
}
inputStream = zipFile.getInputStream(entry)。
fileOut = 新しい FileOutputStream(file)。
をしながら (( これ .readedBytes = inputStream.read()。 これ .buf) ) > 0){。
fileOut.write( これ .buf , 0 , これ .readedBytes )。
}
fileOut.close()を実行します。
inputStream.close()を実行します。
}
}
これ .zipFile.close()を実行します。
} キャッチ (IOExceptionのioe){。
ioe.printStackTrace()を実行します。
}
}
// バッファサイズを設定する
公開 ボイド setBufSize( int bufSize){
これ .bufSize = bufSize;
}
// AntZip クラスのテスト
公開 静的 ボイド main(String[] args) 投げる Exception{
もし (args.length==2){。
文字列名 = args[1];
AntZip zip = 新しい AntZip()を使用します。
もし (args[0].equals()の場合 zip" ))
zip.doZip(名前);
さもなくば もし (args[0].equals()の場合 解凍してください。 ))
zip.unZip(name)を実行します。
}
さもなくば {
System.out.println( 使用方法:"使用方法:" );
System.out.println( "zip:java AntZip -zip directoryName" );
System.out.println( "解凍:java AntZip -unzip fileName.zip" );
投げる 新しい 例外( 引数エラー!"引数エラー!" );
}
}
}
関連
-
アクセス制限です。タイプ 'BASE64Decoder' は API ではない (必要なライブラリ xxx の制限)
-
xxx は型に解決できない エラー解決
-
List<Integer> 型をインスタンス化できません。
-
Map<String,Boolean> 型をインスタンス化できません。
-
SLF4J: クラスパスが複数の SLF4J バインディングを含んでいる Error
-
リクエストのエンティティが大きすぎる問題の解決
-
エラー コンストラクタ worker(int, String, float) は未定義です。
-
未処理の例外:java.text.ParseException
-
既に使用されているアドレス:JVM_Bind (ポート競合)
-
JIRA REST API 呼び出し方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Javaでエラーが発生しました。非静的フィールドへの静的な参照を作成できません。
-
エラー: jdkのバージョンの問題により、クエリへの参照が曖昧になる
-
Java の例外解決。コンストラクタの呼び出しはコンストラクタ内の最初のステートメントでなければならない
-
mvn -v error: main class not found or couldn't be loaded org.codehaus.plexus.classworlds.launcher.
-
Error: missing `server' JVM at `C:\Program Files (x86)\Javajre1.8.0_151bin server╱jvm.dll'.
-
java にリソースリークがある: 'input' が閉じられない Solution
-
無効なカラム名
-
[Java] jdk1.7 trustAnchors パラメータは空であってはならない
-
Javaで未処理の例外が発生する理由
-
中に内部エラーが発生しました。「pro-test 用のディスクリプタをロードしています。