请问压缩文件名为中文,怎么进行处理后,在压缩包看的文件名不再是乱码? 请问压缩文件名为中文,怎么进行处理后,在压缩包看的文件名不在是乱码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我就是想做一个简单的package,入口是一个文件夹名(baseDir)和一个zip文件名(out.zip),功能就是把baseDir下所有文件包括目录结构打成一个压缩包以指定名称(out.zip)输出。现在功能是具备了,不过就是碰到baseDir下有日文,中文的文件夹或者文件会出现乱码,头大 import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.UnsupportedEncodingException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;public class UnZip { static final int BUFFER = 2048; //设置缓冲流 public void unZip(String path) { File fileComptation = new File(path); int i =fileComptation.getAbsolutePath().lastIndexOf('.'); String dirname = new String(); if ( i != -1 ) dirname = fileComptation.getAbsolutePath().substring(0,i); else dirname = fileComptation.getAbsolutePath(); File newdir = new File(dirname); newdir.mkdir(); try { FileInputStream fis = new FileInputStream(path); //获得输入流 ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry file = zis.getNextEntry(); byte[] c = new byte[1024]; int slen; while (file != null) { i = make8859toGB(file.getName()).replace('/','\\').lastIndexOf('\\'); if ( i != -1 ) { File dirs = new File(dirname+File.separator+make8859toGB(file.getName()).replace('/','\\').substring(0,i)); dirs.mkdirs(); dirs = null; } System.out.print("Extract "+make8859toGB(file.getName()).replace('/','\\')+" ........ "); if (file.isDirectory()) { File dirs = new File(make8859toGB(file.getName()).replace('/','\\')); dirs.mkdir(); dirs = null; } else { FileOutputStream out = new FileOutputStream(dirname + File.separator + make8859toGB(file.getName()).replace('/','\\')); while((slen = zis.read(c,0,c.length)) != -1) out.write(c,0,slen); out.close(); } System.out.print("O.K.\n"); file = zis.getNextEntry(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { UnZip uz=new UnZip(); uz.unZip("y:\\XXX.zip") ;//zip压缩文件路径 } public static String make8859toGB(String str) { try { String str8859 = new String(str.getBytes("8859_1"),"GB2312"); return str8859; }catch(UnsupportedEncodingException ioe) { return str; } }} 呵呵,这个问题似乎google也没能很好的解决(Gmail) 请问Eclipse插件开发里,怎么调用别人写的插件功能?比如:代码整理 请教个算法问题 Socket通讯问题!!急急 Java applet 安全性问题 如何在匿名类中获得 JCheckBox 的标签 捐分贴(1) 大家帮帮我 JB中如何设置找dll动态库???动态库测试没问题!! 字符 ' 替换 成 '' 的问题 着急、上火,win2000 server 的autoexec.bat问题? jar文件能不能解压后当作bean使用? 如何用<html:errors>标签格式显示错误信息!郁闷很久了,请高手帮忙!
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class UnZip
{
static final int BUFFER = 2048; //设置缓冲流
public void unZip(String path)
{
File fileComptation = new File(path); int i =fileComptation.getAbsolutePath().lastIndexOf('.');
String dirname = new String();
if ( i != -1 )
dirname = fileComptation.getAbsolutePath().substring(0,i);
else
dirname = fileComptation.getAbsolutePath();
File newdir = new File(dirname);
newdir.mkdir();
try
{
FileInputStream fis = new FileInputStream(path); //获得输入流
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry file = zis.getNextEntry();
byte[] c = new byte[1024];
int slen;
while (file != null)
{
i = make8859toGB(file.getName()).replace('/','\\').lastIndexOf('\\');
if ( i != -1 )
{
File dirs = new File(dirname+File.separator+make8859toGB(file.getName()).replace('/','\\').substring(0,i));
dirs.mkdirs();
dirs = null;
}
System.out.print("Extract "+make8859toGB(file.getName()).replace('/','\\')+" ........ ");
if (file.isDirectory())
{
File dirs = new File(make8859toGB(file.getName()).replace('/','\\'));
dirs.mkdir();
dirs = null;
}
else
{
FileOutputStream out = new FileOutputStream(dirname + File.separator + make8859toGB(file.getName()).replace('/','\\'));
while((slen = zis.read(c,0,c.length)) != -1)
out.write(c,0,slen);
out.close();
}
System.out.print("O.K.\n");
file = zis.getNextEntry();
}
}
catch (Exception e)
{
e.printStackTrace();
}
} public static void main(String[] args)
{
UnZip uz=new UnZip();
uz.unZip("y:\\XXX.zip") ;//zip压缩文件路径
} public static String make8859toGB(String str)
{
try
{
String str8859 = new String(str.getBytes("8859_1"),"GB2312");
return str8859;
}catch(UnsupportedEncodingException ioe)
{
return str;
}
}
}