首页上一页 1 下一页尾页 6 条记录 1/1页
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
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();
}
}
}
(注意: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();
}
}
}
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);// 输出流写入
}
这段代码的确有问题,对您学习造成不正确的指引,我们深表歉意,以下提供另一版代码,可供参考:
(注意: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);// 输出流写入
}
2015-09-10
4L
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
你好 大神 你看看 这段程序 貌似没什么多大的意义啊!!
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]
回复:
这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
你好 大神 你看看 这段程序 貌似没什么多大的意义啊!!
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]
回复:
这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
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]
回复:我试了一下 没有这一句 依然能成功解压,这是为什么呢?
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
你好 大神 你看看 这段程序 貌似没什么多大的意义啊!!
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]
回复:
这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
[/FIELDSET]
回复:我试了一下 没有这一句 依然能成功解压,这是为什么呢?
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]
回复:
不开启数据流,只是创建了一个同名的文件,文件里什么内容都没有
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
[FIELDSET][LEGEND]引自:2楼[/LEGEND]
你好 大神 你看看 这段程序 貌似没什么多大的意义啊!!
while ((count = in.read()) != -1) {// 如有输入流可以读取到数值
os.write(count);// 输出流写入
}
[/FIELDSET]
回复:
这是将压缩文件以压缩数据流的方式读出,再以普通文件数据流的方式写到硬盘上。这里的count是一个临时的缓存变量,用来保存输入流读出的字节,如果这个字节不是-1(即文件没有读取完),则将这个字节写入到文件输出流中。输入流循环的read(),输出流循环的write(),直到文件写完为止。如果不用数据流,我们无法将压缩包中的文件复制出来。
[/FIELDSET]
回复:我试了一下 没有这一句 依然能成功解压,这是为什么呢?
[/FIELDSET]
回复:
不开启数据流,只是创建了一个同名的文件,文件里什么内容都没有