使用Java 匯入Zip檔案遇到中文命名亂碼問題
偶然做到匯入Zip附件,遇到中文命名亂碼,總結下,備註
ZipFile zf = new ZipFile(import_fj);//接收檔案
InputStream is=new BufferedInputStream(new FileInputStream(import_fj));//通過流傳遞ZipInputStream zin = new ZipInputStream(is,Charset.forName("ISO-8859-1")); //最重要的一個編碼,首先通過ISO-8859-1轉碼
ZipEntry ze=null;
OutputStream fs =null;
Map<String, Object> map=new HashMap<String,Object>();
if(import_fj!=null){
while((ze = zin.getNextEntry()) != null) {
//判斷目錄結構區分檔案和資料夾
ze=new ZipEntry(new String(ze.getName().getBytes("ISO8859_1"),"GBK"));//將ISO-8859-1轉為GBK,此時中文已經正常顯示
if (ze.isDirectory()) {
//資料夾
}else{
//檔案
if(ze.getName()!=null){
//建立(身份證號碼/附件名)型別資料夾格式
String[] s=ze.getName().split("/");
if(s[1]!=null&&s.length>2){
int result=examregisterService.compareBySfzhm(s[1]);
if(result==1){
//資料庫存在報名表圖片資訊建立資料夾通過流匯入圖片檔案
path = getRealPath("/") + "upload\\" +"seaman/examregister/fj/" +s[1];
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
maps=getUploadFiles("seaman/examregister/fj/"+s[1]);
//判斷目錄下是否已經存在圖片檔案避免重複讀取檔案流
if(maps==null){
path = getRealPath("/") + "upload\\" +"seaman/examregister/fj/"+s[1]+"/"+s[2];
fs = new FileOutputStream(path);
long size = ze.getSize();
int len;
if (size > 0) {
InputStream fis=zf.getInputStream(ze);
byte[] bt = new byte[1024];
while((len=fis.read(bt)) != -1) {
fs.write(bt,0,len);
}
fs.flush();
fs.close();
fis.close();
successSize++;
}