2012-02-09 32 views
-1

私はこれをかなりの時間作業しています。私はこの問題に問題を見つけることができないようです。基本的に私が持っていることはこれです:私は瓶を持ってjavaのjar/zipファイルから特定のディレクトリを見つけるにはどうすればよいですか?

を、のは、それを呼びましょう「はA.jar」

私は、ディレクトリ「Z」を取得する必要があり、それが「Z「はA.jar」から内容をだが、 "は" a.jar "のルートディレクトリにありません。

"z" は "//X/Y" "/ X/Y /" としている "はA.jar" であるので、このようになります。

「はA.jar/X/Y/z/"

まあまあです。ところで、 "a.jar"はすべてが尽きるものなので、明らかにクラスパスにあります。

+2

何を試しましたか?通常のzip/jarユーティリティクラスを使用していますか、それともclasspathリソースとして取得していますか? –

+0

私は通常のzip/jarユーティリティ(ZipEntry)を使用していますが、サブディレクトリではうまく動作しません。 – Josh

+1

http://stackoverflow.com/questions/5830581/getting-a-directory-inside-a-jar –

答えて

3

基本的には、各ZipEntryに対してisDirectory()があるかどうかをチェックし、それも解析する必要があります。 チェックアウトこのリンク: http://www.javaworld.com/javaworld/javatips/jw-javatip49.html

LE:ここ

はjarファイルからファイルを抽出し、あなたが特定のパスを指定した場合、それはそのフォルダのみを抽出します完全な例です:

public void doUnzip(String inputZip, String destinationDirectory, String specificPath) 
     throws IOException { 
    int BUFFER = 2048; 
    File sourceZipFile = new File(inputZip); 
    File unzipDestinationDirectory = new File(destinationDirectory); 
    unzipDestinationDirectory.mkdir(); 

    ZipFile zipFile; 
    // Open Zip file for reading 
    zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); 

    // Create an enumeration of the entries in the zip file 
    Enumeration<?> zipFileEntries = zipFile.entries(); 

    // Process each entry 
    while (zipFileEntries.hasMoreElements()) { 
     // grab a zip file entry 
     ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); 

     if(specificPath != null){ 
      if(entry.getName().startsWith(specificPath) == false) 
       continue; 
     } 

     File destFile = new File(unzipDestinationDirectory, entry.getName()); 

     // create the parent directory structure if needed 
     destFile.getParentFile().mkdirs(); 

     try { 
      // extract file if not a directory 
      if (!entry.isDirectory()) { 
       BufferedInputStream is = new BufferedInputStream(
         zipFile.getInputStream(entry)); 
       // establish buffer for writing file 
       byte data[] = new byte[BUFFER]; 

       // write the current file to disk 
       FileOutputStream fos = new FileOutputStream(destFile); 
       BufferedOutputStream dest = new BufferedOutputStream(fos, 
         BUFFER); 

       // read and write until last byte is encountered 
       for (int bytesRead; (bytesRead = is.read(data, 0, BUFFER)) != -1;) { 
        dest.write(data, 0, bytesRead); 
       } 
       dest.flush(); 
       dest.close(); 
       is.close(); 
      } 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 
    zipFile.close(); 
} 

public static void main(String[] args) { 
    Unzip unzip = new Unzip(); 
    try { 
     unzip.doUnzip("test.jar", "output", "x/y/z"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

これを行うと、私はzからファイルのリストを取得することはできません。 – Josh

1

..(ZipEntry)ですが、サブディレクトリではうまく機能しません。

うまく動作します。エントリを繰り返し、パスがそのサブディレクトリと同じであることを確認します。そうであれば、それをリストに追加します(または処理します)。

関連する問題