比方说,我的文件夹uploadFiles下有文件若干个,如:“图片1.jpg”,:“图片2.jpg”,:“图片3.jpg”3个图片文件
这些图片的文件名都是中文的名称,
我现在通过java压缩程序把这3个文件压缩后,然后下载下来,解压后,发现图片的中文名称全部是乱码了,请求帮助
,我需要解决中文问题,请不要把图片名称改为英文名称或数字哦?
我的代码如下:
public static void zipFiles(File[] srcfile,File zipfile){
byte[] buf=new byte[1024];
ZipOutputStream out=null;
try {
//ZipOutputStream类:完成文件或文件夹的压缩 out=new ZipOutputStream(new FileOutputStream(zipfile));
for(int i=0;i<srcfile.length;i++){
FileInputStream in=new FileInputStream(srcfile[i]);
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
int len;
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.flush();
out.closeEntry();
in.close();
}
out.close();
System.out.println("压缩完成.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out !=null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这些图片的文件名都是中文的名称,
我现在通过java压缩程序把这3个文件压缩后,然后下载下来,解压后,发现图片的中文名称全部是乱码了,请求帮助
,我需要解决中文问题,请不要把图片名称改为英文名称或数字哦?
我的代码如下:
public static void zipFiles(File[] srcfile,File zipfile){
byte[] buf=new byte[1024];
ZipOutputStream out=null;
try {
//ZipOutputStream类:完成文件或文件夹的压缩 out=new ZipOutputStream(new FileOutputStream(zipfile));
for(int i=0;i<srcfile.length;i++){
FileInputStream in=new FileInputStream(srcfile[i]);
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
int len;
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.flush();
out.closeEntry();
in.close();
}
out.close();
System.out.println("压缩完成.");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out !=null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
如果你不希望它使用UTF-8,你可以使用Apache中的ants带的那个ZipOutputStream之类 。这个我记得是使用默认编码的
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
我debug到这里发现变量srcfile[i].getName()是中文的,但是,输出的文件却是乱码
所以我建议你使用Apache ants中带的org.apache.tools.zip.ZipOutputStream,它不会使用UTF-8编码!