java新人,在学习解压缩文件时,解压文件后,里面的文件变文件夹

publicclassTest{publicstaticvoidmain(Stringargs[]){ZipInputStreamzin;try{zin=newZipIn... public class Test{
public static void main(String args[]){
ZipInputStream zin;
try{
zin=new ZipInputStream(new FileInputStream("E:/word.zip"));
ZipEntry entry=zin.getNextEntry();
while((entry=zin.getNextEntry()) != null && !entry.isDirectory()){
File file=new File("E:\\"+entry.getName());
System.out.println(file);
if(!file.exists()){
file.mkdirs();
file.createNewFile();
}
zin.closeEntry();
System.out.println(entry.getName()+"解压成功");
}
zin.close();
}catch(Exception e){e.printStackTrace();}
}
}
原文件夹是:word文件夹下包含两个文件:1.txt和2.txt。
解压后:word文件夹下:1.txt文件夹和2.txt文件夹(两个空文件夹)
展开
 我来答
百度网友9ccec88
推荐于2017-11-27 · TA获得超过2018个赞
知道大有可为答主
回答量:2154
采纳率:50%
帮助的人:1606万
展开全部

file.mkdirs();只有目录才要创建文件夹,如果这个file本应该是文件,你却创建了一个同名文件夹,那自然不能再创建这个文件了(即后面的file.createNewFile();无法创建文件).

另外,对于文件其实是不需要createNewFile的,因为如果你真要解压文件,你要打开对应文件流,并且创一个输出流,输出到目标文件中(这个文件会自动创建的),但你的代码里面没看到这个步骤,给你个完整的解压示例.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class Test
{
    public static void unZipFiles(String zipPath, String descDir) throws IOException
    {
        unZipFiles(new File(zipPath), descDir);
    }

    public static void unZipFiles(File zipFile, String descDir) throws IOException
    {
        File pathFile = new File(descDir);
        if (!pathFile.exists())
        {
            pathFile.mkdirs();
        }
        ZipFile zip = new ZipFile(zipFile);
        for (Enumeration entries = zip.entries(); entries.hasMoreElements();)
        {
            ZipEntry entry = (ZipEntry) entries.nextElement();
            String zipEntryName = entry.getName();
            InputStream in = zip.getInputStream(entry);
            String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");

            //获取当前file的父路径,这才是文件夹
            File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
            
            // 判断路径是否存在,不存在则创建文件路径
            if (!file.exists())
            {
                file.mkdirs();
            }
            // 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
            if (new File(outPath).isDirectory())
            {
                continue;
            }
            // 输出文件路径信息
            System.out.println(outPath);

            OutputStream out = new FileOutputStream(outPath);
            byte[] buf1 = new byte[1024];
            int len;
            while ((len = in.read(buf1)) > 0)
            {
                out.write(buf1, 0, len);
            }
            in.close();
            out.close();
        }
        System.out.println("******************解压完毕********************");
    }

    public static void main(String[] args) throws Exception
    {
        unZipFiles(new File("d:/test.zip"), "e:/");
    }
}
一道_四狼_雨痕
2015-01-07 · TA获得超过569个赞
知道小有建树答主
回答量:736
采纳率:18%
帮助的人:170万
展开全部
楼主粗心了,把这一行: file.mkdirs();给去掉就可以了,
追问
原文件夹是:word文件下两个txt文件。压缩后,我把原来那个word文件夹给删了。然后解压zip:
上面那句:File file=new File("E:\\"+entry.getName) ,里面路径就是:E:/word/1.txt,其实在E盘根本就没有word文件夹(压缩完,就删除了),系统运行结果就是无法找到路径,所以无法创建file
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
50...0@qq.com
2015-01-07
知道答主
回答量:34
采纳率:0%
帮助的人:10.2万
展开全部
599849821
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式