按例题中第一个方法使用Private修饰词,exlipse提示错误,不用能。
压缩后的文件打开,每个目录下都有一个后缀带”E:“的条目,如图。
代码都是从书上抄下来的,检查了多次也没有不一样的地方啊??如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class myzip {//创建类
private void zip(String zipFileName, File f) throws Exception {//创建方法,(压缩后文件,目标压缩文件)
//创建压缩类对象out
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
zip(out, f , "");//调用重构后的方法zip()
System.out.println("压缩中......");
out.close();//关闭流
}
private void zip(ZipOutputStream out, File f, String base) throws Exception {//重构方法zip,加入参数(压缩对象类代替参数压缩后文件、目标压缩文件、目录文件名)
if (f.isDirectory()){//判断目标文件是否为文件夹
File[] f1 = f.listFiles();//获取文件内数组
if(base.length()!=0){//如果文件夹内不为空
out.putNextEntry(new ZipEntry(base+"/"));//写入文件条目名加'/'
}
for (int i=0;i<f1.length;i++){//循环遍历数组
zip(out,f1[i],base+f1[i]);//调用方法
}
}else{//如果不是文件夹,是文件。
out.putNextEntry(new ZipEntry(base));//调用压缩对象out创建新的条目,
FileInputStream in= new FileInputStream(f);//创建文件输出流对象
int b;
System.out.println(base);
while((b = in.read())!=-1){//循环读出流对象直至尾部
out.write(b);//写入文件条目
}
in.close();//关闭流
}
}
public static void main(String[] args) {
myzip book = new myzip();
try {
book.zip("E:/hello.zip", new File("E:/hello"));
System.out.println("压缩完成");
} catch (Exception e) {
}
}
}