Java程序临时读写目录导致的C盘爆满

现象

C盘爆满

  如果某一天你正在Windows电脑上调试自己的Java程序,突然就提示 java.io.IOException No space left on device,一看C盘已经飙红……

C盘文件

  然后你去C盘全选文件看属性,发现占用的才刚过50%,完全看不出来哪儿占用了。



存磁盘清理

  使用磁盘清理也完全看不出来有可清理临时文件的样子。

存储使用情况

  唯有在设置>系统>存储>C盘里找到了21.7G的临时文件。

临时文件

  可是点击进去却发现无法进行清理,或许你就应该关注一下java程序运行的临时读写目录设置了。

分析

  java读写的临时目录是通过系统变量:java.io.tmpdir 来进行设置的,如果没进行设置可以通过以下语句来输出查看默认值:

1
System.out.println(System.getProperty("java.io.tmpdir"));

  对于Windows来说默认值通常就是在目录:C:\Users\<用户名>\AppData\Local\Temp\ 下面,如果有用到一些涉及到文件读写的API,对应的临时文件就会写入这个目录下面,比如:

1
Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(new File(fontUrl)));

临时文件

解决方案

  既然知道原因了,解决方案也比较简单,首先是去到对应的临时目录下,全选文件进行删除,把空间释放出来,然后找一个比较空闲的硬盘分区,将临时读写文件目录设置过去即可,如:

1
System.getProperties().setProperty("java.io.tmpdir", "tmp/runtime/");