2012-03-02 12 views
5

画像、フォント、メッセージなどのさまざまなフォルダを保持するjarファイルがあります。 フォントフォルダ内のすべてのファイルを読み込む必要があります。jarファイル内のフォルダからファイルを読み取る

現在、私のJavaコードは、jarファイル内のすべてのコンテンツを反復処理しています。次のように私のコードは次のとおりです。

private void loadApplicationSpecificFonts() { 
     try{ 
       JarFile jarFile = new JarFile("owenstyle-jar-config.jar"); 
      JarEntry entry; 
       String fontName; 

    for(Enumeration em = jarFile.entries(); em.hasMoreElements();) { 
        String s= em.nextElement().toString(); 
        if(s.endsWith("ttf")){ 
         fontName= s.substring(s.lastIndexOf("/")+1); 
         fontName= fontName.substring(0, fontName.indexOf(".ttf")); 
         entry = jarFile.getJarEntry(s); 
         InputStream input = jarFile.getInputStream(entry); 
         Font font= Font.createFont(Font.TRUETYPE_FONT, input); 
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
         ge.registerFont(font); 

         input.close(); 
       } 
    } 
      jarFile.close(); 
     }catch (IOException e){ 
      System.err.println("Error: " + e.getMessage()); 
     }catch (FontFormatException e){ 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 

は、私は、フォントフォルダ(フォント\ congigジャー\設定\資産)のパスを与えるのではなく、瓶の中のすべてのコンテンツを横断することができるように、方法はあります。私は、フォントフォルダのパスが固定されていることを知っているので、jarファイル内のすべてのフォルダにtravesringのオーバーヘッドをかけたくありません。

+0

多分、このコードは機能しますか?入力ストリームinput = jarFile.getInputStream(エントリ); ' –

+1

誰がJarを作ったのですか?それがあなたなら、Jarの既知の場所にインクルードされたファイルのリストを置くことは理にかなっています。例えば。 'fonts/all.list'です。単一のリソースを取得し、それを読んで、フォントエントリ名のリストを取得します。 –

+0

Andrew- jarファイルは私によって作られていません。それはassmebledと送信、私は自分のフォントフォルダ内のフォントファイル内のフォントを読む必要があります – nishMaria

答えて

1

あなたは

Class.getResourceAsStream( "/ PKG/RESOURCE_NAME")を使用することができます。

このコードは、クラスパスからリソースを検索し始めます。

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html

+0

Class.getResourceAsStream( "/ pkg/resource_name")を使用する必要がある場合は、フォントファイルの正確な名前を指定する必要があります。私の問題は、フォントフォルダ内に複数のフォントファイルがあることです。ですから、最初にjarファイル内のフォルダのパスを指定し、次にフォントフォルダ内のすべてのファイルを動的に反復して登録する方法が必要です。 – nishMaria

+0

この投稿が見つかりました[http://stackoverflow.com/questions/1429172/how-do-i-i-files-inside-a-jar-file](http://stackoverflow.com/questions/1429172)/how-do-i-list-the-files-inside-a-jar-file)を使用します。 – ejrav

+0

私のrequirmentは基本的にはjarファイル内のすべてのファイル/フォルダを繰り返し処理しますが、フォントファイルが存在する場所を知っているので、フォントフォルダを繰り返し処理するだけです。ですから、私はjarファイル内のフォントフォルダの直接のパスを与えてから、フォントフォルダを繰り返して、フォントファイルを一つずつ読む方法がありますか? – nishMaria

3

あなたがクラスパスにjarファイルを置くためにクラスローダーを利用することができます。 jarファイル内のすべてのファイルはロード可能なリソースです。

//ref to some jar 
File f = new File("/tmp/foo.jar"); 

//create a new classloader for this jar 
URLClassLoader loader = URLClassLoader.newInstance(new URL[]{f.toURI().toURL()}); 

//load resource with classloader 
InputStream inputStream = loader.getResourceAsStream("foo/bar/test.txt"); 

//...do stuff with inputStream 
+1

フォントフォルダ内に複数のファイルがあります。だから、私はそのような方法が必要です1)私はjarファイル内のフォルダの直接のパスを与える(このように私は最初にjarファイルを初期化する必要はありませんし、1つずつコンテンツを読むとファイルの拡張子を参照してください。 ttd)2)フォルダを1つずつ順番に繰り返し、グラフィック環境に登録してください。 – nishMaria

+0

ClassLoaderを使用する方法はありません。良いアドバイスはAndrew Thompsonがあなたの質問に対する彼のコメントで示唆していることです:すべてのフォントのpathesをリストするjarの中にファイルを保存してください。ファイルを読み込んで、格納されているパスを繰り返し実行します。 – rompetroll

関連する問題