㈠ java Zip解析亂碼問題
debug一下,看看filepath輸出什麼,看看下面這個代碼
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048;
static boolean flag = false;
public static void main(String args[])throws IOException{
File file= new File("D:/Temp");
ZipSubdirectory(file);
FileInputStream file1 = new FileInputStream(ZipSubdirectory(file));
System.out.println(file1.toString());
}
//ZipSubdirectory函數將一個指定目錄(包括它子目錄)壓縮成一個同名壓縮文件(這里稱為"ORIGIN")
public static File ZipSubdirectory(File myDir)throws IOException{
//創建緩沖輸入流BufferedInputStream
BufferedInputStream origin = null;
//創建ZipOutputStream對象,將向它傳遞希望寫入文件的輸出流
File zipFile=new File("D:/"+myDir.getName()+".zip");
FileOutputStream fos=new FileOutputStream(zipFile);
ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(fos,BUFFER));
//dirContents[]獲取當前目錄(myDir)所有文件對象(包括子目錄名)
File dirContents[]=myDir.listFiles();
//創建臨時文件tempFile,使用後刪除
File tempFile=null;
try{
//處理當前目錄所有文件對象,包括子目錄
for(int i=0;i < dirContents.length; i++){
//使用遞歸方法將當前目錄的子目錄轉成一個ZIP文件,並作為一個ENTRY加進"ORIGIN"
if(dirContents[i].isDirectory()){
tempFile = ZipSubdirectory(dirContents[i]);
flag=true;
}
//如果當前文件不是子目錄
else {
tempFile=dirContents[i];
//flag標記tempFile是否由子目錄壓縮成的ZIP文件
flag = false;
}
System.out.println("Compress file: "+tempFile.getName());
FileInputStream fis = new FileInputStream(tempFile);
origin = new BufferedInputStream(fis,BUFFER);
//為被讀取的文件創建壓縮條目
ZipEntry entry = new ZipEntry(tempFile.getName());
byte data[]= new byte[BUFFER];
int count;
//在向ZIP輸出流寫入數據之前,必須首先使用out.putNextEntry(entry); 方法安置壓縮條目對象
out.putNextEntry(entry);
//向ZIP 文件寫入數據
while((count=origin.read(data,0,BUFFER))!=-1){
out.write(data,0,count);
}
//tempFile是臨時生成的ZIP文件,刪除它
if(flag==true){
flag = tempFile.delete();
System.out.println("Delete file:"+tempFile.getName()+flag);
}
//關閉輸入流
origin.close();
}
out.close();
} catch(Exception e){
System.out.println(e);
}
//遞歸返回
return zipFile;
}
}
來自
㈡ java用apache的ZipEntry壓縮文件名為中文的word文件時,文件名亂碼
對於輸出zip文件的ZipOutputStream對象設置一下編碼:
ZipOutputStreamout=newZipOutputStream(newFileOutputStream(
zipFileName));
//設置filenames的編碼
out.setEncoding("UTF-8");
通常linux下使用utf8進行文件命名編碼,而windows下採用gbk,根據你的系統情況而定
可參考下api:
http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/api/org/apache/tools/zip/ZipOutputStream.html
㈢ java壓縮zip文件中文亂碼問題
我以前也遇到過這個問題,最後發現java自帶的zip壓縮沒辦法解決中文名亂碼的問題
你可以使用apache ant的zip類(package: org.apache.tools.zip)來解決這個問題。
㈣ 請大神幫忙解決一個用java解壓縮一個zip壓縮格式位元組流中文內容亂碼問題!
這個問題我有點印象,好像是包的問題。好像不能用zip的那個,換另一個包就好了。具體我也不記得了
㈤ java壓縮中文zip,系統winrar解壓改中文zip會出現亂碼
建議 使用 apache ant 工具包來做壓縮,能完美的解決中文亂碼問題
㈥ 用java直接讀取zip類型的文件時中文亂碼問題怎麼解決
1.一般是軟體程序解碼錯誤。如瀏覽器把GBK碼當成是Big5碼顯示,或電子郵件程序把對方傳來的郵件錯誤解碼。如果在發送時編碼錯誤,收件者的電郵程序是不能解碼的,需要寄件者的電郵程序重新編碼再寄。
2.字體檔案(font file)不對。
3.來源編碼錯誤,或文件受到破壞。
4.一種語言版本的操作系統安裝了另外一種語言版本的應用程序,或者應用程序安裝的升級補丁的語言版本與應用程序原來安裝的語言版本不一致。
5.早期單位元組的應用程序在打開雙位元組語言的文件時不能正確識別文字的分割,在換行的地方把一個字從中分成兩段,導致緊接在後面的整個一行全部都是亂碼。
6.低版本的應用程序不能識別高版本的程序創建的文件。
7.由於TXD等修改文件出現內部沖突,一些修改游戲的MOD(modification)CLEO、IV補丁、真實補丁、技能補丁、升級補丁和CCI人物補丁等游戲修改軟體的「Readme」「必看!」等閱讀文件會出現亂碼。
㈦ 如何解決java程序解壓含有中文名的zip壓縮包出現亂碼
上次利用java自動的java.util.zip.ZipEntry和�0�2java.util.zip.ZipFile來解壓zip文件,今天發現程序在讀取解壓文件時居然報了空指針異常,debug程序後發現時讀取不到文件,產生原先是zip壓縮文件中含有中文的名稱,讀取文件名為亂碼,
報找不到文件名,所以報了空指針,想到ant構建文件也有這個功能,換了apache的ant.jar居然解決了中文的問題。
備份下。
�0�2import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;/*** 讀取zip壓縮文件中文本的內容
* @author fish*/public class ReadZip {
public static void main(String args[]) {try {String fileName = "D:/workspace/java/src/ReadZip.zip";
//構造ZipFile
ZipFile zf = new ZipFile(new File(fileName));
//返回 ZIP file entries的枚舉.
Enumeration<? extends ZipEntry entries = zf.getEntries();
while (entries.hasMoreElements()) {
ZipEntry ze = entries.nextElement();
System.out.println("name:"+ze.getName());
long size = ze.getSize();
if (size 0) {
System.out.println("Length is " + size);
BufferedReader br = new BufferedReader(
new InputStreamReader(zf.getInputStream(ze)));
String line;
while ((line = br.readLine()) != null) {
㈧ Java zip 解壓文件中文 亂碼問題.. 跪求大神解答
字元格式需要進行轉碼了
㈨ 請問用java編寫一個壓縮程序,怎樣解決壓縮文件zip里的文件名亂碼問題!
沒做過壓縮程序,JAVA裡面的字元串使用的編碼為unicode,ZIP文件裡面用的應該是本地編碼(中文操作系統用的是GB2312)。
你可以嘗試著用類似這樣的語句:String str = ( otherStr.getBytes("GB2312") );
祝好運。
㈩ 用好壓軟體壓縮文件為zip格式,在用JAVA的zip4j包進行解壓,但是解壓後出現亂碼,怎麼事
按照你說的我沒有亂碼,把壓縮文件貼出來瞧瞧。