使用子文件夹解压缩Android中的文件夹

时间:2012-06-30 01:05:56

标签: java android unzip

首先,我已经多次搜索并搜索了大量的Stackoverflow页面,但我无法正常工作。我想要做的是我有一个像以下结构的zip文件:

zipfile.zip

  

文件夹

     
    

Subfolder1

         
      

带空格的子文件夹(大约100个,但不知道这些数量)

             
        

带空格的子子文件夹

                 
          

一些文件

        
                 

SubSubFolderWithoutSpaces

                 
          

更多文件

        
      
    
         

Subfolder2

         
      

带空格的子文件夹(大约100个,但不知道这些数量)

             
        

带空格的子子文件夹

                 
          

一些文件

        
                 

SubSubFolderWithoutSpaces

                 
          

更多文件

        
      
    
         

Subfolder3

         
      

带空格的子文件夹(大约100个,但不知道这些数量)

             
        

带空格的子子文件夹

                 
          

一些文件

        
                 

SubSubFolderWithoutSpaces

                 
          

更多文件

        
      
    
         

Subfolder4

         
      

带空格的子文件夹(大约100个,但不知道这些数量)

             
        

带空格的子子文件夹

                 
          

一些文件

        
                 

SubSubFolderWithoutSpaces

                 
          

更多文件

        
      
    
  

我目前正在使用http://www.jondev.net/articles/Unzipping_Files_with_Android_%28Programmatically%29中的代码来尝试解压缩文件,但它所做的只是创建一个名为zipfile的目录,然后在其中有一个名为folder的子目录,该目录在目录中没有任何内容显然不应该发生。

非常感谢任何帮助。

更新: 哦,万一你想知道我有WRITE_EXTERNAL_STORAGE_PERMISSION。

1 个答案:

答案 0 :(得分:5)

我希望这可以帮到你:

private boolean unzipPack(InputStream stream) {
    FileOutputStream out;
    byte buf[] = new byte[16384];
    try {
        ZipInputStream zis = new ZipInputStream(stream);
        ZipEntry entry = zis.getNextEntry();
        while (entry != null) {
            if (entry.isDirectory()) {
                File newDir = new File(rootDirectory + entry.getName());
                newDir.mkdir();
            } else {
                String name = entry.getName();
                File outputFile = new File(rootDirectory + name);
                String outputPath = outputFile.getCanonicalPath();
                name = outputPath
                .substring(outputPath.lastIndexOf("/") + 1);
                outputPath = outputPath.substring(0, outputPath
                .lastIndexOf("/"));
                File outputDir = new File(outputPath);
                outputDir.mkdirs();
                outputFile = new File(outputPath, name);
                outputFile.createNewFile();
                out = new FileOutputStream(outputFile);

                int numread = 0;
                do {
                    numread = zis.read(buf);
                    if (numread <= 0) {
                        break;
                    } else {
                        out.write(buf, 0, numread);
                    }
                } while (true);
                out.close();
            }
            entry = zis.getNextEntry();
        }
        return true;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}      

<强>参考
android pico installer source