我想将当前目录下的某个(些)文件添加到zip包中,现在如果这个(些)文件名含有中文字符,当用winzip或winrar 解压时,看到的文件名原来是中文的地方对应的是乱码(此处不讨论文件中的内容),
当前包下有 "java编程思想.txt"这个文件,源码如下,压缩后再解压,文件名为"java缂栫▼鎬濇兂.txt". 请问这个该怎么解决啊?import java.io.*;
import java.util.zip.*; public class compress{
public static void main(String[] args){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(
new FileInputStream("java编程思想.txt"),"ISO8859_1"));
FileOutputStream f=new FileOutputStream("dest.zip");
CheckedOutputStream ch=new CheckedOutputStream(f,new CRC32());
ZipOutputStream out=new ZipOutputStream(
new BufferedOutputStream(ch));
int c;
out.putNextEntry(new ZipEntry("java编程思想.txt"));
while((c=in.read())!=-1)
out.write(c);
in.close();
out.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
当前包下有 "java编程思想.txt"这个文件,源码如下,压缩后再解压,文件名为"java缂栫▼鎬濇兂.txt". 请问这个该怎么解决啊?import java.io.*;
import java.util.zip.*; public class compress{
public static void main(String[] args){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(
new FileInputStream("java编程思想.txt"),"ISO8859_1"));
FileOutputStream f=new FileOutputStream("dest.zip");
CheckedOutputStream ch=new CheckedOutputStream(f,new CRC32());
ZipOutputStream out=new ZipOutputStream(
new BufferedOutputStream(ch));
int c;
out.putNextEntry(new ZipEntry("java编程思想.txt"));
while((c=in.read())!=-1)
out.write(c);
in.close();
out.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
代码如下:import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream; public boolean zip(ZipOutputStream zos ,File f,String szBaseDir) throws IOException {
File[] fList;
int n=0;
byte[] byBuf=new byte[m_nBufSize];
int nRead=0;
ZipEntry ze;
BufferedInputStream bis;
if(!f.exists())
return false;
if(f==null)
f=new File(".");
//若是目录,递归
if(f.isDirectory()){
fList=f.listFiles();
//遍历该目录下的各个文件
for(n=0;n<fList.length;++n){
if (zip(zos, fList[n], szBaseDir + f.getName() + File.separator) == false)
return false;
}
//若是文件,写入压缩流
}else{
ze=new ZipEntry(szBaseDir+f.getName());
zos.putNextEntry(ze);
bis=new BufferedInputStream(new FileInputStream(f));
while ((nRead = bis.read(byBuf)) >= 0) {
zos.write(byBuf, 0, nRead);
}
bis.close();
zos.closeEntry();
}
return true;
}
而且,我试过上面的方法,压缩得很慢。怎么办?