JAVA自定义外部字体文件Font后出现硬盘吃光的问题

有个需求要用美术字体在图片上写字

用自定义的文字有两个方法:

1、

  Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream input);

2、

  Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));

我一开始用的是第一种方法:

1
2
3
InputStream input = FontLoader. class .getResourceAsStream(classPathTTF);
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT,  input);
input.close();

然后就出现了吃硬盘的问题

它会在你的容器的临时文件哪里写很多的临时文件

你用一次他就读一次,拷贝一份 *.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个方法就可以了。

1
2
String pathString = FontLoader. class .getResource( "/font/xxx.ttf" ).getFile();
Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT,  new  File(pathString));

这样无论多少次引用都不会有tmp文件产生

 

总结一下

java api通过流加载字体库的实现方式是要创建临时文件的,等到jvm正常关闭会清理这些临时文件 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值