从jar文件中的文件夹中读取文件

时间:2012-03-02 10:35:01

标签: java

我有一个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 \ config \ assets \ fonts),而不是遍历jar中的所有内容。我知道字体文件夹的路径是固定的,所以我不希望通过jar中的所有文件夹进行搜索。

2 个答案:

答案 0 :(得分: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)

你可以使用

Class.getResourceAsStream(" / pkg / resource_name");

此代码将开始从类路径中搜索资源。

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