有个需求要用美术字体在图片上写字html
用自定义的文字有两个方法:java
一、windows
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream input);字体
二、google
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));spa
我一开始用的是第一种方法:操作系统
InputStream input = FontLoader.class.getResourceAsStream(classPathTTF); Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, input); input.close();
而后就出现了吃硬盘的问题。htm
它会在你的容器的临时文件哪里写不少的临时文件blog
你用一次他就读一次,拷贝一份 *.tmp文件出来图片
对于tmp文件的描述google上有不少资料,可是也没有点到要点。
问题参考资料:
sun关于tmp文件的描述
http://www.securiteam.com/windowsntfocus/5UP0H0KDFU.html
http://stackoverflow.com/questions/1751673/font-createfont-leaves-files-in-temp-directory
[#4743] - Too many temporary font files (+~JF tmp)
http://community.jaspersoft.com/jasperreports-library/issues/4743
有各类的说法:有人说是bug,有些人说升级到有些版本不会有问题,有些人说是操做系统的缘故等。
还有人的解决方案是定时跑任务,删除tmp文件。这个方式很是不稳当。
如下就是一个用input方式引入自定义font的方式,下面参考资料有坑。
http://www.java2s.com/Code/Java/2D-Graphics-GUI/Loadfontfromttffile.htm
其实问题很简单,只要替换成第2个方法就能够了。
String pathString = FontLoader.class.getResource("/font/xxx.ttf").getFile(); Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));
这样不管多少次饮用都不会有tmp文件产生
总结一下
方法一、消耗IO,吃硬盘,速度慢,生成不少tmp的文件,大硬盘没感受,吃光了你就叫吧。
方法二、低IO,速度快,不会生成tmp文件,没有input流,没必要关系是否关系。
作项目的一个坑,本身作个笔记