我正在嘗試開發可處理非英文字符(變音符號,阿拉伯語等)壓縮文件的代碼,但壓縮文件包含不正確的名稱。我正在使用java版本1.7.0_45因此它不應該是由於提到的錯誤here。我將字符集設置爲UTF-8的ZipOutputStream
構造函數,按照Javadocs它應該按照我的要求工作。即使使用Java編寫包含非英文字符的文件名時不正確的壓縮條目7
我確信壓縮文件正在被正確寫入,因爲試圖從文件中讀取條目給出正確的文件名(如預期的那樣)。
但是,當我嘗試用Ubuntu默認ArchiveManager/Unzip工具打開/解壓縮時,文件名會混亂。
這裏是我的代碼:
private void convertFilesToZip(List<File> files) {
FileInputStream inputStream = null;
try {
byte[] buffer = new byte[1024];
FileOutputStream fileOutputStream = new FileOutputStream("zipFile.zip");
ZipOutputStream outputStream = new ZipOutputStream(fileOutputStream, Charset.forName("UTF-8"));
for (File file : files) {
inputStream = new FileInputStream(file);
String filename = file.getName();
System.out.println("Adding file : " + filename);
outputStream.putNextEntry(new ZipEntry(filename));
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.closeEntry();
}
if(inputStream != null) inputStream.close();
outputStream.close();
System.out.println("Zip created successfully");
System.out.println("=======================================================");
System.out.println("Reading zip Entries");
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File("zipFile.zip")), Charset.forName("UTF-8"));
ZipEntry zipEntry;
while((zipEntry=zipInputStream.getNextEntry())!=null){
System.out.println(zipEntry.getName());
zipInputStream.closeEntry();
}
zipInputStream.close();
} catch (IOException exception) {
exception.printStackTrace();
}
}
輸出的文件如下:
Adding file : umlaut_ḧ.txt
Adding file : ذ ر ز س ش ص ض.txt
Adding file : äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt
Adding file : pingüino.txt
Adding file : ÄÖÜäöüß- Español deEspaña.ppt
Zip created successfully
=======================================================
Reading zip Entries
umlaut_ḧ.txt
ذ ر ز س ش ص ض.txt
äǟc̈ḧös̈ ẗǚẍŸ_uploadFile4.txt
pingüino.txt
ÄÖÜäöüß- Español deEspaña.ppt
有沒有人成功地實施了什麼,我想在這裏實現。 有人可以指點我可能錯過或做錯了什麼。我做了所有我可以的谷歌,甚至嘗試Apache Commons Compress
,但仍然沒有運氣。
它在錯誤報告中提到該錯誤已在Java 7中解決,那麼爲什麼代碼無法正常工作。
任何幫助,高度讚賞。提前致謝。
你確定的解壓縮工具,您使用的是能夠處理您的文件名中的字符? –
是的。如前所述,默認的ubuntu歸檔管理器和解壓縮工具都能夠分別壓縮/解壓縮文件。但是,我的代碼創建的文件名稱混亂了。 –
我遇到了一個解決方法,我使用'ProcessBuilder'來創建zip。但是,這不是一個非常有效的方法。有沒有人能夠解決它與Java? –