Java文件压缩与解压缩(一)(三)

2014-11-24 10:55:43 · 作者: · 浏览: 3
out.println("true");
}else{
System.out.println("false");
}
此时为true
此处:
if (zipEntry.isDirectory()) {
new File(perUnzipFilePath).mkdirs();
} else {
new File(perUnzipFilePath).getParentFile().mkdirs();
}
已经建立了每个文件夹.
然后才开始对每个空文件夹和每个文件进行流操作.
和上面的道理一致,刚开始犯了个错误,没有采用
else {
fos = new FileOutputStream(perUnzipFile);
is = zipFile.getInputStream(zipEntry);
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
而是用if(perUnzipFile.isFile()){}来操作,这当然错了.
因为该perUnzipFile没有执行perUnzipFile.createNewFile();
所以它还不是File.类似的情况,多采用流操作来进行读写.
所以总结两种与File有关的操作:
1 File f=new File("");
f.createNewFile();
然后对f操作
2 file f=new File("");
然后用输入输出流进行流操作
举例子:
File f=new File("F:\\2221x.txt");
FileOutputStream fos=new FileOutputStream(f);
String string="hello";
byte []b=string.getBytes();
fos.write(b, 0, b.length);
该例子是正确的.
疑问:没有执行 f.createNewFile()为什么不报错.因为输出流
FileOutputStream已经帮我们做了该工作了.
修改例子即可知:
File f=new File("F:\\2221x.txt");
if (f.isFile()) {
System.out.println("true1");
} else {
System.out.println("false1");
}
FileOutputStream fos=new FileOutputStream(f);
if (f.isFile()) {
System.out.println("true2");
} else {
System.out.println("false2");
}
String string="hello";
byte []b=string.getBytes();
fos.write(b, 0, b.length);
输出false1,true2
这就得到了验证.
*/
public void unZipFile2(String zipedFilePath, String unzipPath) {
FileOutputStream fos=null;
InputStream is=null;
ZipEntry zipEntry=null;
String perUnzipFilePath=null;
if (!unzipPath.endsWith(File.separator)) {
unzipPath+=File.separator;
}
try {
ZipFile zipFile=new ZipFile(zipedFilePath);
Enumeration entries=zipFile.entries();
byte [] buffer=new byte[1024*8];
int len=0;
while (entries.hasMoreElements()) {
zipEntry = (ZipEntry) entries.nextElement();
perUnzipFilePath = unzipPath + zipEntry.getName();
//1建立每个文件夹
if (zipEntry.isDirectory()) {
//处理空文件夹的情况
//创建空目录
new File(perUnzipFilePath).mkdirs();
} else {
//为每个文件创立其所在目录
new File(perUnzipFilePath).getParentFile().mkdirs();
}
//2在用流操作处理每个文件夹中的文件
// 2.1if中的操作只是针对空目录而进行的.所以if中的代码可以
// 注释掉,无实际意义.
// 2.2else中的操作是对于每个具体的文件而进行的流操作
File perUnzipFile = new File(perUnzipFilePath);
if (perUnzipFile.isDirectory()) {
File[] files = perUnzipFile.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
fos = new FileOutputStream(file);