A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋蕈 中级黑马   /  2012-4-6 11:50  /  2473 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在解压缩类:ZipFile,ZipInputStream和ZipEntry 的操作中,编写了以下代码:
import java.io.File;
import java.io.FileInputStream;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;

public class IOTest_03{
        public static void main(String[] args) throws Exception{
                File file=new File("D:"+File.separator+"a.zip");
                ZipInputStream zis=new ZipInputStream(new FileInputStream(file));
                ZipEntry entry=null;
                while((entry=zis.getNextEntry())!=null){
                        System.out.println(entry.getName());
                }
                zis.close();
        }
}

可问题出现了。。在我的a.zip 文件里有三个文件,分别为a.txt test.txt 和 课表.txt(带中文名)

当我在dos 里运行:java IOTest_03时
出现:
D:\virtual_direct>java IOTest_03
a.txt
test.txt
Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
        at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
        at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:297)
        at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:121)
        at IOTest_03.main(IOTest_03.java:18)

这是怎么回事啊?

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

2 个回复

倒序浏览
求解啊。。
回复 使用道具 举报
下面是我做的一个压缩代码,有注释,你能看懂的话就这块就真的懂了....

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

class Demo8 {

        public static void main(String[] args) throws IOException {
                File target = new File("e:\\java2345");
               
                // 创建输出流  ZipOutputStream , 随时准备写入压缩数据
                ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(target.getPath() + ".zip"));
                               
                //zipDir(target, zout, target.getAbsolutePath().length()+1);
                zipDir(target, zout, "");
               
                zout.close();
        }
        private static void zipDir(File target, ZipOutputStream zout, String rootPath) throws IOException {
        // 遍历目录  如果是目录  创建新的条目接着递归  如果是文件,创建新的条目,拷贝数据
                File[] files = target.listFiles();
                // 遍历子文件
                for(File file : files) {
                        if(file.isDirectory()) {
                                // 是目录, 递归
                                zipDir(file, zout, rootPath + file.getName() + "/");
                        }else {
                                // 是文件, 文件要压缩
                                // 创建新的压缩条目
                                String path = rootPath + file.getName();
                                System.out.println(path);
                                // 获得相对于target的目录
                                zout.putNextEntry(new ZipEntry(path));
                                InputStream in = new FileInputStream(file);
                                int len;
                                byte[] buffer = new byte[1024];
                                while((len=in.read(buffer))!=-1)
                                        zout.write(buffer, 0, len);
                                //in.close();
                                zout.closeEntry();
                        }
               
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马