swing

java解决Zip文件中文名问题
方案:使用apache的ant.jar中的org.apache.tools.zip包,不要使用java.util.zip.*

package zipfile;
import java.io.*;
import java.util.*;
import java.io.File;
import org.apache.tools.zip.*;
public class ZipCode{
static final int BUFFER = 2048;
static boolean flag = false;
public static void main(String args[]) throws IOException{
// File file = new File(args[0]);
File file = new File("E:\\测试");
FileInputStream file1 = new FileInputStream(ZipSubdirectory(file));
}
// ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN")
public static File ZipSubdirectory(File myDir) throws IOException{
// 创建缓冲输入流BufferedInputStream
BufferedInputStream origin = null;
// 创建ZipOutputStream对象,将向它传递希望写入文件的输出流
File zipFile = new File(myDir.getName() + ".zip");
// FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
// 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 org.apache.tools.zip.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);
}
// 关闭输入流
out.closeEntry();
origin.close();
// tempFile是临时生成的ZIP文件,删除它
if(flag == true){
flag = tempFile.delete();
System.out.println("Delete file:" + tempFile.getName()+" "
+ flag);
}
}
}catch(Exception e){
System.out.println(e);
}
// 递归返回
out.close();
return zipFile;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值