现在流行的框架都会从jar文件中读取配置文件,我们现在可以通过JarConnection实现这个功能。
Jar URL Connection是一种连接到Java文档文件或Jar文件中的一个入口连接定位。
jar url的语法为:
jar:!/{entry},例如:jar:http://www.example.com/ex.jar!/com/demo/Class.class.
Jar URL只能用来应用Jar文件或Jar文件中的切入点。
以下是官方的用法,具体见官方JavaSE API.
A Jar entry
jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
A Jar file
jar:http://www.foo.com/bar/baz.jar!/
A Jar directory
jar:http://www.foo.com/bar/baz.jar!/COM/foo/
!/ is refered to as the separator.
/**
* 注册字体
*
* @throws IOException
*/
public static void registFontMap() throws IOException {
// System.out.println(PodPrintConfigUtil.getValue("FONT_DIR"));
String fontDir = PodPrintConfigUtil.getValue("FONT_DIR");
URL url = Thread.currentThread().getContextClassLoader().getResource(fontDir);
String urlStr = url.getFile();
if (urlStr.contains("!/")) {
// jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
String jarPath = urlStr.substring(0, urlStr.indexOf("!/") + 2);
URL jarURL = new URL("jar:" + jarPath);
JarURLConnection jarCon = (JarURLConnection) jarURL.openConnection();
JarFile jarFile = jarCon.getJarFile();
Enumeration<JarEntry> jarEntrys = jarFile.entries();
while (jarEntrys.hasMoreElements()) {
JarEntry entry = jarEntrys.nextElement();
// 简单的判断路径,
String name = entry.getName();
if (name.startsWith(fontDir) && !entry.isDirectory()) {
// System.out.println("entry.getName()" + name);
FontFactory.register(name);
}
}
} else {
FontFactory.registerDirectory(urlStr);
}
Set<String> fonts = new TreeSet<String>(FontFactory.getRegisteredFonts());
for (String fontname : fonts) {
System.out.println(fontname);
}
}