2011-10-18 7 views
2

jarファイルの中にあるファイルfilename.txtが必要です。コードを使ってtxtファイルの内容を読むにはどうすればよいですか? * .jarファイルの操作に使用できるライブラリはありますか?jarからファイルを取得するには?

+0

を使用して、それをバック包装するためのjarファイルの正しいJDKを使用することを確認してくださいあなたがプログラムでそれを取得しますか、またはそれを抽出するだけですか?前者の場合は、クラスパスのyyy.jarかどうか? –

答えて

3
public class Test { 
    public static void main(String[] args) { 
     InputStream stream = Test.class.getResourceAsStream("/test.txt"); 
     Scanner s = new Scanner(stream); 
     while (s.hasNext()) { 
      System.out.println(s.next()); 
     } 
    } 
} 

jarはアプリケーションのクラスパス上にある必要があります。

このコードは、すべてのjarファイルのルートにあるtest.txtファイルを検索します。

クラスパスにないjarを指定する必要がある場合は、他の提案がより価値があるかもしれません。

+0

jarがクラスパス上にない場合は、カスタムクラスローダーを作成し、そのクラスからリソースをロードできます。 – MeBigFatGuy

0

zipユーティリティソフトで開く。 .jarは単に.zipファイルです。

+1

私はJavaコードでそれが必要です。私はプログラマーであり、ユーザーではありません。 – shift66

+0

次に、javaが提供するZIP APIを使用して、そうすることができます。ZipInputStreamを作成し、ZipEntryを取得し、ファイル名を取得するために名前を確認してください:) – Saurabh

2

* .jarファイルを扱うライブラリはありますか?

はい、java.util.zipは、JDK自体(不要サードパーティ製のlib)に、(jarファイルは、ファイル、more hereを効果的にzip圧縮されている)があります。

また、Oracle Webサイトのthis articleも参照してください。 jarファイルがクラスパスにある場合

import java.io.*; 
import java.util.zip.*; 

public class UnZip { 
    final int BUFFER = 2048; 
    public static void main (String argv[]) { 
     try { 
     BufferedOutputStream dest = null; 
     FileInputStream fis = new FileInputStream(argv[0]); 
     ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); 
     ZipEntry entry; 
     while((entry = zis.getNextEntry()) != null) { 
      System.out.println("Extracting: " +entry); 
      int count; 
      byte data[] = new byte[BUFFER]; 
      // write the files to the disk 
      FileOutputStream fos = new FileOutputStream(entry.getName()); 
      dest = new BufferedOutputStream(fos, BUFFER); 
      while ((count = zis.read(data, 0, BUFFER)) != -1) { 
       dest.write(data, 0, count); 
      } 
      dest.flush(); 
      dest.close(); 
     } 
     zis.close(); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 
3

:ここでは彼らの最初の例のコードは、(それが不十分なエラーチェックなどを持っているほとんどの例のように、そしてもちろんのない私のコード)のアーカイブからすべてのファイルを解凍し、ですgetClass().getClassLoader().getResourceAsStream(...)を使用して、そのファイルにアクセスできます。 jarファイルがクラスパスにない場合は、java.util.jar.JarFileをチェックしてください。

1

あなたは別のライブラリは必要ありません。デフォルトのzipパッケージはうまくいきます。今、あなたはxxx.txtするパスを知っていることを

private String getFile(File jar, String requestedFile) throws IOException{ 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); //change ouptut stream as required 
    ZipInputStream in = null; 
    try { 
     in = new ZipInputStream(new FileInputStream(jar)); 
     ZipEntry entry; 
     while((entry = in.getNextEntry())!=null){ 
      if (entry.getName().equals(requestedFile)){ 

       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = in.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       } 
      } 
     } 
    } finally { 
     if (in!=null){ 
      in.close(); 
     } 
     out.close(); 

    } 
    return new String(out.toByteArray()); 
} 
0

yyy.jarであなたのxxx.txt

jar tf yyy.jar

に位置しています最初のチェックのサンプル出力

META-INF/MANIFEST.MF 
images/pic.gif 
files/abc.txt 
files/xxx.txt 

エキスそれによって

次のコマンドが動作するはず
jar xf yyy.jar files/xxx.txt 
1

jar xf yyy.jar files/xxx.txt

jar uf yyy.jar files/xxx.txt