2017-07-03 10 views
1

生成されたJarからファイルをロードする方法がわかりません。jarファイルからJavaロードファイル

私はジャー実行したときにこれが私のコードであり、それはIDE内で正常に動作しますが、ない:

URL url = ClassLoader.getSystemResource("."); 
    try 
    { 
     File dir = new File(url.toURI()); 
     for (File f : dir.listFiles()) 
     { 
      String fn = f.getName(); 
      if (fn.endsWith(".png")) 
      { 
       ImageView iv = new ImageView(fn); 
       // ... 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

をジャーの構造は次のとおりです。

  • META-INF
  • de(およびクラスファイルを含むパッケージの残りの部分)
  • ファイル1
  • ファイル2
  • ...など

したがって、これらのファイルはいずれのサブフォルダにもないjarファイルに直接格納されます。

答えて

1

ファイルオブジェクトをjarファイル内のファイルにアクセスするために使用できないため、コードが機能しません。あなたができることは、ZipInputStreamsを使って&を開き、あなたのjarファイルをあなたのjarファイル内の個々のファイルを読むためにZipEntryと一緒に読むことです。 このコードはjarファイルで動作しますが、IDEにはない可能性があります。この場合、現在の状態(IDEまたはJar)を検出し、それに応じて目的のローディングコードを実行することができます。 URLのすでにセットアップを使用して

CodeSource src = ClientMain.class.getProtectionDomain().getCodeSource(); 

URL jar = src.getLocation(); 
ZipInputStream zip = new ZipInputStream(jar.openStream()); 
ZipEntry entry = null; 

while ((entry = zip.getNextEntry()) != null) { 
    String entryName = entry.getName(); 
    if (entryName.endsWith(".png")) { 
     BufferedImage image = ImageIO.read(zip); 
     // ... 
    } 
} 

、我々はプログラムがこの単純なコードで瓶かであるかどうかを確認することができます

new File(jar.getFile()).toString().endsWith("jar")
時にIDEで、(私の場合には日食ので、これは動作しますジャーに、私は "D:\Windows%20Folders\Desktop\Test.jar"

+0

感謝を得たとして、これは完璧に動作します!) new File(jar.getFile()).toString()戻り "D:\Java\Current%20Projects\Test\bin" expensne

関連する問題