已有101人关注
JAVA 从入门到精通 第三版 282页 例15.8 程序出错 ,勘误之后程序还是出错,求编书人员能不能用点心!!!
发表在Java图书答疑 2015-09-10
是否精华
版块置顶:
282 例15.8 解压缩问题, 根据你们的勘误信息  改完程序之后,还是出错,你们解压的  压缩文件,解压之后 不是我所要的文件,而是以文件命名的文件夹。   例如: 我有个压缩文件叫 hello.zip  里面有两文件 分别是 1.txt 和 2.txt 。  用你们程序进行解压  得到:  一个文件夹 :hell   然后打开hello 文件夹  里面出现的不是 我想要的 1.txt 和 2.txt 文本文件  而是 以 1.txt 和 2.txt 命名的文件夹 。没有达到解压目的。  请你们 重视!!!!!!!!
分享到:
精彩评论 6
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-09-10
沙发
这段代码的确有问题,对您学习造成不正确的指引,我们深表歉意,以下提供另一版代码,可供参考:
(注意:java.util.zip包不支持解压中文名称文件)

import java.io.*;
import java.util.zip.*;

public class Decompressing { // 创建文件
public static void main(String[] temp) {
File file = new File("hello.zip");// 当前压缩文件
ZipInputStream zin; // 创建ZipInputStream对象
try { // try语句捕获可能发生的异常
ZipFile zipFile = new ZipFile(file);// 创建压缩文件对象
zin = new ZipInputStream(new FileInputStream(file));// 实例化对象,指明要进行解压的文件
ZipEntry entry = zin.getNextEntry(); // 跳过根目录,获取下一个ZipEntry
while (((entry = zin.getNextEntry()) != null)
&& !entry.isDirectory()) {// 如果entry不为空,并不在同一目录下
File tmp = new File("C:\\"+entry.getName()); // 解压出的文件路径
if (!tmp.exists()) { // 如果该文件不存在
tmp.getParentFile().mkdirs();// 创建文件父类文件夹路径
OutputStream os = new FileOutputStream(tmp);// 将文件目录中的文件放入输出流
InputStream in = zipFile.getInputStream(entry);// 用输入流读取压缩文件中制定目录中的文件
int count = 0;// 创建临时变量
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
os.close();// 关闭输出流
in.close();// 关闭输入流
}
zin.closeEntry(); // 关闭当前entry
System.out.println(entry.getName() + "解压成功");
}
zin.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
诺克萨斯之脚
学分:0 LV1
2015-09-10
板凳

你好 大神   你看看 这段程序 貌似没什么多大的意义啊!!


while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
诺克萨斯之脚
学分:0 LV1
2015-09-10
地板
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
这段代码的确有问题,对您学习造成不正确的指引,我们深表歉意,以下提供另一版代码,可供参考:
(注意:java.util.zip包不支持解压中文名称文件)

import java.io.*;
import java.util.zip.*;

public class Decompressing { // 创建文件
public static void main(String[] temp) {
File file = new File("hello.zip");// 当前压缩文件
ZipInputStream zin; // 创建ZipInputStream对象
try { // try语句捕获可能发生的异常
ZipFile zipFile = new ZipFile(file);// 创建压缩文件对象
zin = new ZipInputStream(new FileInputStream(file));// 实例化对象,指明要进行解压的文件
ZipEntry entry = zin.getNextEntry(); // 跳过根目录,获取下一个ZipEntry
while (((entry = zin.getNextEntry()) != null)
&& !entry.isDirectory()) {// 如果entry不为空,并不在同一目录下
File tmp = new File("C:\\"+entry.getName()); // 解压出的文件路径
if (!tmp.exists()) { // 如果该文件不存在
tmp.getParentFile().mkdirs();// 创建文件父类文件夹路径
OutputStream os = new FileOutputStream(tmp);// 将文件目录中的文件放入输出流
InputStream in = zipFile.getInputStream(entry);// 用输入流读取压缩文件中制定目录中的文件
int count = 0;// 创建临时变量
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
os.close();// 关闭输出流
in.close();// 关闭输入流
}
zin.closeEntry(); // 关闭当前entry
System.out.println(entry.getName() + "解压成功");
}
zin.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
[/FIELDSET]

回复:你好 大神 你看看 这段程序 貌似没什么多大的意义啊!!


while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
  
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-09-10
4L
[FIELDSET][LEGEND]引自:2楼[/LEGEND]

你好 大神   你看看 这段程序 貌似没什么多大的意义啊!!


while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]

回复:
  这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
诺克萨斯之脚
学分:0 LV1
2015-09-10
5L
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
[FIELDSET][LEGEND]引自:2楼[/LEGEND]

你好 大神   你看看 这段程序 貌似没什么多大的意义啊!!


while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]

回复:
  这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
[/FIELDSET]

回复:我试了一下  没有这一句 依然能成功解压,这是为什么呢?
  
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-09-11
6L
[FIELDSET][LEGEND]引自:5楼[/LEGEND]
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
[FIELDSET][LEGEND]引自:2楼[/LEGEND]

你好 大神   你看看 这段程序 貌似没什么多大的意义啊!!


while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]

回复:
  这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
[/FIELDSET]

回复:我试了一下  没有这一句 依然能成功解压,这是为什么呢?
  
[/FIELDSET]

回复:
  不开启数据流,只是创建了一个同名的文件,文件里什么内容都没有
首页上一页 1 下一页尾页 6 条记录 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经营性网站备案信息 营业执照