linux目录下的一级子目录过多,导致创建目录失败(java file mkdirs)
一个稳定运行几年的java程序,最近突然报java.io.FileNotFoundException、java.lang.NullPointerException异常
------------有效建议1------------
仔细查看源代码,发现在新建输出流前,就调用了创建目录的代码mkdirs().
左思右想不得其果,这套程序在本地运行都是正常的。。。地址:http://www.devexception.com/j2se/545904.htm
感觉应该是环境的原因,生产环境是linux的,初步分析是不是磁盘满了,用命令df -h / 查看一下,发现还有很多磁盘空间可以使用。
看来不是这个原因导致的
再进入程序操作文件的目录,使用linux命令mkdir ,未创建成功,提示信息如下:
mkdir: cannot create directory `devexception': Too many links
发现这个目录下已经生成了好多子目录,用ls命令查看,发现一直在刷屏,完全展示不下。
换一个命令查看:
find ./devexception -type d | wc -l
显示:31999
查下资料,发现这个数字已经达到了linux下某个文件夹下的子目录数的上限。怪不得调用类java.io.File的mkdirs()方法了也没创建目录
为了规避这个异常,一般都是让某个文件夹下的目录不会跟着时间的推移而无限制的上涨,有个常用的方法就是在这个目录下新建以年月日为单位的目录
如./2014/07/02,这样这个目录的子目录会分配到具体某一天的目录下,某一天的数据也会放到这一天所在目录下,随着时间的推移,某个子目录也不会
一直递增。从而突破linux系统的限制。