我有一个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中的所有文件夹进行搜索。
答案 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