已有101人关注
请问一下第十五章,15.7例子中 的一段代码的意思。
发表在Java图书答疑 2015-11-24
是否精华
版块置顶:
private void zip(ZipOutputStream out, File f, String base)
throws Exception { // 方法重载
if (f.isDirectory()) { // 测试此抽象路径名表示的文件是否是一个目录
File[] fl = f.listFiles(); // 获取路径数组
out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entry
base = base.length() == 0 ? "" : base + "/"; // 判断参数是否为空
for (int i = 0; i < fl.length; i++) { // 循环遍历数组中文件
zip(out, fl[i], base + fl[i]);
}
} else {
out.putNextEntry(new ZipEntry(base)); // 创建新的进入点
// 创建FileInputStream对象
FileInputStream in = new FileInputStream(f);
int b; // 定义int型变量
System.out.println(base);
while ((b = in.read()) != -1) { // 如果没有到达流的尾部
out.write(b); // 将字节写入当前ZIP条目
}
in.close(); // 关闭流
}
}
1.out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entry  
这里base已经是空字符了 你再加个"/"那路径不就出问题了吗?
2.for (int i = 0; i < fl.length; i++){
省略。。。

我不太明白for循环是如何里边数组中的文件,原理是什么? 

3.另外后面else中的语句,没有达到流的尾部,是什么意思?为什么要把b写入当前ZIP条目?else后面的语句能讲解下吗?
谢谢老师
分享到:
精彩评论 3
佚名
学分:70 LV3
TA的每日心情
开心
2021-07-05 14:21:40
2015-11-24
沙发
压缩后的文件,文件夹除了hello之外 还多了个空白 空名的文件夹!
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-11-25
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
压缩后的文件,文件夹除了hello之外 还多了个空白 空名的文件夹!
[/FIELDSET]

回复:

out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entry
base = base.length() == 0 ? "" : base + "/"; // 判断参数是否为空

改成:

   if (base.length() != 0) {
out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entry
}
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-11-25
地板
1.建议用我刚才的改法
2.看这行代码:
if (f.isDirectory())  // 如果这个file是一个文件夹
File[] fl = f.listFiles(); // 获取此文件夹中所有的文件名

这样fl就是文件夹下所有的文件了。


3.看这行嗲吗
int b; // 临时的字节缓存
while ((b = in.read()) != -1) { // 将读取的字节写入缓存
out.write(b); // 将缓存写入压缩流中
}
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照