2013-05-16 59 views
0

我試圖提取zip文件到另一個位置,我得到拒絕訪問錯誤..提取一個zip文件拒絕訪問

CODE:

package org.spoutcraft.launcher; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.List; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

public class UnZip 
{ 
    List<String> fileList; 
    private static final String INPUT_ZIP_FILE = "C:\\Level Up! Games" + File.separator + "Perfect World" + File.separator + "Updates" + File.separator + "Launcher.zip"; 
    private static final String OUTPUT_FOLDER = "C:\\Level Up! Games" + File.separator + "Perfect World"; 

    public static void main(String[] args) 
    { 
     UnZip unZip = new UnZip(); 
     unZip.unZipIt(INPUT_ZIP_FILE,OUTPUT_FOLDER); 
    } 

    /** 
    * Unzip it 
    * @param zipFile input zip file 
    * @param output zip file output folder 
    */ 
    public void unZipIt(String zipFile, String outputFolder) 
    { 
     byte[] buffer = new byte[1024]; 
     try 
     { 
      //create output directory is not exists 
      File folder = new File(OUTPUT_FOLDER); 
      if(!folder.exists()) 
      { 
       folder.mkdir(); 
      } 

      //get the zip file content 
      ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile)); 
      //get the zipped file list entry 
      ZipEntry ze = zis.getNextEntry(); 

      while(ze!=null) 
      { 
       String fileName = ze.getName(); 
       File newFile = new File(outputFolder + File.separator + fileName); 

       System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 

       //create all non exists folders 
       //else you will hit FileNotFoundException for compressed folder 
       new File(newFile.getParent()).mkdirs(); 

       FileOutputStream fos = new FileOutputStream(newFile);    

       int len; 
       while ((len = zis.read(buffer)) > 0) 
       { 
        fos.write(buffer, 0, len); 
       } 

       fos.close(); 
       ze = zis.getNextEntry(); 
      } 

      zis.closeEntry(); 
      zis.close(); 

      System.out.println("Done"); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    }  
} 

在主類我以前用過這樣的代碼: 下載後的壓縮文件:

try { 
    UnZip.main(null); 

和IM收到此錯誤:

file unzip : C:\Level Up! Games\Perfect World\config 
    java.io.FileNotFoundException: C:\Level Up! Games\Perfect World\config (Acesso negado) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at org.spoutcraft.launcher.UnZip.unZipIt(UnZip.java:57) 
at org.spoutcraft.launcher.UnZip.main(UnZip.java:20) 

有人能幫助我嗎?

回答

2

我認爲在行

FileOutputStream fos = new FileOutputStream(newFile); 

要創建流代表目錄,您應該只創建流文件條目。

試着改變你的循環,以

while (ze != null) { 

    String fileName = ze.getName(); 
    File newFile = new File(outputFolder + File.separator 
      + fileName); 

    System.out.println("file unzip : " + newFile); 

    // create all non exists folders 
    // else you will hit FileNotFoundException for compressed folder 
    if (ze.isDirectory()) { 
     newFile.mkdirs(); 
    } else { 
     FileOutputStream fos = new FileOutputStream(newFile); 

     int len; 
     while ((len = zis.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
     } 

     fos.close(); 
    } 
    ze = zis.getNextEntry(); 
}