有個需求要用美術字體在圖片上寫字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流,沒必要關係是否關係。
作項目的一個坑,本身作個筆記