笔者写了一段程序监控文件的最后一行数据确认是否写入完成。轮询多次后导致如下异常:
java.io.FileNotFoundException: /data/sample/wu_1d0h7noerneo2gt1qav1kdhttc5.gz.out (Too many open files)
at java.io.RandomAccessFile.open0(Native Method)
at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
at sw.melody.modules.docker.util.MoreLogUtil.getLastLine(MoreLogUtil.java:67)
at sw.melody.modules.docker.util.MoreLogUtil.getLastLine(MoreLogUtil.java:100)
at sw.melody.modules.docker.task.PollLogFileTask.run(PollLogFileTask.java:62)
1.RandomAccessFile简介
利用文件指针变量偏移来访问文件的任意位置,常常用在访问局部文件的内容,比如访问文件首行、末行等。
这个类在很多资料上翻译成中文都是:随机访问文件,在中文里,随机是具有不确定的含义,指一会访问这里,一会访问那里的意思。如果以这种语义来解释的话,就会感到很困惑。其实,Random在英文中不仅仅有随机,还有任意的意思。任意表示我们可以指定文件中任何一个位置去操作一个文件。
该类有几个重要的方法,除了read、write,还有seek用来设置读写的偏移量,close用来关闭任意读文件流、并且释放系统资源
网友评论