我的代码将目录检测为文件和文件作为目录

时间:2014-12-23 23:29:09

标签: java android

我的代码将目录检测为文件和文件作为目录。它为什么这样做?感谢

我已经攻击了问题发生的全部功能,对不起,如果它很乱!再次感谢您的帮助!

unzip(getFilesDir() + "/", "bla.zip", getFilesDir() + "/unzip/");

 public void unzip(String filepath, String filename, String unzip_path) {
    try {
        InputStream is = new FileInputStream(filepath + filename);

    Log.d("1st", filepath + filename);
    ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));

    try {
        ZipEntry ze;
        while ((ze = zis.getNextEntry()) != null) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int count;

            String filename_temp = ze.getName();
            File fmd = new File(unzip_path, filename_temp);
            Log.d("2nd", unzip_path + filename_temp);
            Log.d("ERROR7", fmd.toString());
            //if (!fmd.exists()) {
                if(fmd.isDirectory()) {
                    Log.d("ERROR4", fmd.toString());
                    fmd.mkdirs();
                } else if (fmd.isFile()) {
                    Log.d("ERROR4", fmd.toString() +"FILE");
                }

            //} else {}
            Log.d("ERROR5", "DIR");
            FileOutputStream fout = new FileOutputStream(unzip_path + filename_temp);
            Log.d("ERROR6", "DIR");
            while ((count = zis.read(buffer)) != -1) {
                baos.write(buffer, 0, count);
                byte[] bytes = baos.toByteArray();
                fout.write(bytes);
                baos.reset();
            }

            fout.close();
            //}
        }
        zis.close();
    } catch (IOException e) {
        Log.d("ERROR1", e.toString());
    }} catch (FileNotFoundException e) {            Log.d("ERROR2", e.toString());}
}

1st﹕ /data/data/au.com.amon/files/bla.zip
2nd﹕ /data/data/au.com.amon/files/unzip/docProps/
 ERROR7﹕ /data/data/au.com.amon/files/unzip/docProps
ERROR4﹕ /data/data/au.com.amon/files/unzip/docPropsFILE
ERROR5﹕ DIR
ERROR6﹕ DIR
2nd﹕ /data/data/au.com.amon/files/unzip/docProps/app.xml
ERROR7﹕ /data/data/au.com.amon/files/unzip/docProps/app.xml
ERROR5﹕ DIR
ERROR1﹕ java.io.FileNotFoundException: /data/data/au.com.amon/files/unzip/docProps/app.xml: open failed: ENOTDIR (Not a directory)
DOCUMENT﹕ docProps

2 个答案:

答案 0 :(得分:2)

您的代码没有意义。从ZIP文件中读取的文件名称并不一定代表磁盘上已存在的文件,也不构成File构造的文件。因此,在其上测试isDirectory()是徒劳的,并且测试它是否应该调用mkdirs()更加徒劳无功。如果是目录,则不应该致电mkdirs()

要检查的内容是ZipEntry.isDirectory().

答案 1 :(得分:0)

尝试以下方法:

File fmd = new File(getFilesDir() + "/unzip/", filename_temp);

您使用的是单字符串arg构造函数,它表示路径名,而不是文件名。