import java.io.*;
import java.util.zip.*;
public class MyZip{
private void zip(String zipFileName,File inputFile)throws Exception{
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
zip(out,inputFile,"");
System.out.println("压缩中....");
out.close();
}
private void zip(ZipOutputStream out,File f,String base)throws Exception{
if(f.isDirectory()){
File[] fl=f.listFiles();
out.putNextEntry(new ZipEntry(base+"/"));
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 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[] temp){
MyZip book=new MyZip ();
try{
book.zip("D:/hello.zip",new File("D:/hello"));
System.out.println("压缩完成");
}catch(Exception ex){
}
}
}
下面这段JAVA代码中运行结束后是不是IF和ELSE语句都运行了?请把这两个语句的运行规律告诉我谢谢!(越详细越好!)
答案:2 悬赏:30 手机版
解决时间 2021-07-21 04:47
- 提问者网友:雪舞兮
- 2021-07-20 12:20
最佳答案
- 五星知识达人网友:梦中风几里
- 2021-07-20 13:25
这个if(f.isDirectory()) 做的判断是 入参是否是个目录。如果是目录,就递归压缩目录里面所有的子目录和文件。如果是文件,就将该文件压缩到相对路径名中也就是 base。
注意这里:for(int i=0;i<fl.length;i++){
zip(out,fl[i],base+fl[i]);
}上面的代码迭代了子目录和文件。对于子目录也会有同样的迭代。
注意这里:for(int i=0;i<fl.length;i++){
zip(out,fl[i],base+fl[i]);
}上面的代码迭代了子目录和文件。对于子目录也会有同样的迭代。
全部回答
- 1楼网友:渡鹤影
- 2021-07-20 13:36
不能都运行啊,你传的是.zip文件上面的就不运行了,它不是目录啊
你在if里面和else里面各自写上两条打印语句看看打印了那条呗 不久知道了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯