Atitit. zip ファイルを解凍するためのベスト プラクティス java c# .net php
1. ZIP ファイル圧縮用の Apache Ant パッケージ、upzip のおおよそのプロセス.. 1
3. ファイル名を読み取ることはできますが、入力を読み取ることができず、NPE と表示されます。 2
4. Ant1.8.2.jar 2
5. #---詳細コード 2
6.
1. Jdk zip と Apache ant zip
以下に実装された関数は、zip ファイル内の画像ファイルを現在のディレクトリに解凍し、jdk に付属するコードを使用して zip ファイルを処理することですが、それは処理できません中国語の名前を指定しないとエラーが発生します。
以下は、Apache の zip ファイル処理パッケージを使用して処理され、中国語名のファイルを処理でき、上記と同じ機能があります。
Apache ant バージョン 1.7 の tools.zip を使用して zip ファイルを解凍し、中国語の問題を解決します
1.7 ではまだ中国語をサポートしていないようです..
著者:: 老Wow的paw Attilax Ailong、EMAIL:1466519819@ qq .com
2. Apache Ant パッケージは、upzip の一般的なプロセスである ZIP ファイルを圧縮します...私は何年も前に、ZIP 標準圧縮ファイルを解凍するこの種のビジネスに遭遇しました。以前書いた操作クラスが見つからなくなってしまったので、最近プロジェクトでこのような業務を扱う必要があったので、新しく書きました。 Java は、ZIP パッケージを処理するための API を提供します。ただし中国語のサポートがあまり良くないので、Apache AntのZIP操作APIを直接使って処理しています。 ANT の API は中国語サポートの問題を解決し、非常に使いやすくなっています。動作カテゴリは以下のとおりです。
以下のクラスは、Apache の機能のごく一部のみを使用します。より具体的な API については、ドキュメントを参照してください。ここではこれ以上の説明はありません。
* Apache の ant.jar パッケージをプロジェクトの Lib にインポートします
3. ファイル名の読み取りは問題ありませんが、入力を読み取ることができず、NPE と表示されます。
原因:::エンコードの問題。デフォルトは utf8 のようですが、実際は gbk です...
org.apache.tools.zip.ZipFile zipFile =new ZipFile(zipFileName, "gbk");
2 番目に、ZipFile を直接使用します。 unZipFilesメソッド zip = new ZipFile(zipFile); 解凍すると中国語がまだ文字化けしていましたので、ZipFile zip = new ZipFile(zipFile, "GBK"); に変更したら正常になりました。プロジェクトの特定の構成と動作環境に関連する可能性があります。
4. Ant1.8.2.jar
5. #---詳細コード
/**
* 静的メソッドを解凍します
* @param zipFileName
* @param OutputDirectory
* @throws Exception
*/
public static void extract(String zipFileName,String OutputDirectory,String encode) throws Exception{
{
// = "utf-8";
org.apache.tools.zip.ZipFile zipFile =new ZipFile(zipFileName, encode);
//new org.apache.tools.zip.ZipFile(zipFileName) を試してください。 );
java.util.Enumeration e = zipFile.getEntries();
org.apache.tools.zip.ZipEntry zipEntry = null;
while (e.hasMoreElements()){
zipEntry = (Zipntry) e.nextelement ();
}} catch (zipentryisnullex e2) {System.out.println(e2.getMessage());
System.out.println("---- --------");
}
}
}
catch (Exception ex){
System.out.println("ファイル解凍中の例外"+ex.getMessage() );
ex.printStackTrace();
}
}
private static void upzip(String OutputDirectory, org.apache.tools.zip.ZipFile zipFile, org.apache.tools.zip.ZipEntry zipEntry) は IOException をスローします、ZipException、FileNotFoundException、zipEntryIsNullEx {
if (zipEntry.isDirectory()){
String name=zipEntry.getName();
name=name.substring(0,name.length()-1);// for del fesyegeor
mkDirs(outputDirectory+File.separator+name);
//System.out.println("Create directory:"+outputDirectory+File.separator+name);
}else{ //ファイルエントリ o9o
String name=zipEntry.getName();
String dir = name.substring(0,name.lastIndexOf("/"));
mkDirs(outputDirectory+File.separator+dir);
//System.out.println("ファイルの作成: "+outputDirectory+File.separator+name);
File f=new File(outputDirectory+File.separator+zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
if(in==null)
throw new zipEntryIsNullEx("zipEntryIsNullEx:"+name);
FileOutputStream out=new FileOutputStream(f);
int c;
byte[] by=new byte[1024];
while((c=in .read(by)) != -1){
out.write(by,0,c);
}
out.close();
in.close();
}
}
6. 参考
ZIPファイル圧縮用Apache Antパッケージ - 派手な沈殿深さを消す - ITeye技術Webサイト.htm
Apache zip packageをベースにした圧縮・解凍プログラム_Crusoe_Sina Blog