我需要解析 70万个文本文件 。在同一个目录下。
有什么缓和点的办法没有??速度慢点不要紧,就是不要一运行就cpu占用>95%。 文件命名算是有规律:M.1220331974.C4
第一个M 基本固定不变,中间的10个数字和时间有关,最后的两个“16进制”为了避免重名的,不能确定。有什么办法?别想file.filelist()处理,一次性把70万个文件全部读取。我怕死机~~~ps :linux下运行~~
加上 & 命令,让程序作为后台 能不能有效果??
有什么缓和点的办法没有??速度慢点不要紧,就是不要一运行就cpu占用>95%。 文件命名算是有规律:M.1220331974.C4
第一个M 基本固定不变,中间的10个数字和时间有关,最后的两个“16进制”为了避免重名的,不能确定。有什么办法?别想file.filelist()处理,一次性把70万个文件全部读取。我怕死机~~~ps :linux下运行~~
加上 & 命令,让程序作为后台 能不能有效果??
2.写一个读取文件的方法,参数为上一个方法的返回值
3.读取文件推荐用BufferedReader,并设置一个缓存
4.循环生成文件名,然后读取,直到找不到那个文件为止,说明读取完毕
5.在linux中写一个shell启动这个程序,被设置为后台
用这个...你的文件名是有时间规律的,那就容易分组
每读一组处理完后,更改文件名过滤器继续下一次
我不是打开后怎么处理,打开后文本并不大。
我现在的问题是文件数量太多,获取文件列表就能导致死机。
file.filelist() 就是获取全部文件,把70万个文件全部存入到数组中了·~~
有没有一次获取少量的文件的办法?
文件名是有规律,但是要写出来还是很难的。文件名中的数字是按时间生成的,但是并不连续·~~后面的两个“16进制”也是随机生成的·~
M.1206077548.xi
M.1206113514.AF
M.1206456850.j7这就是那些文件名
String filename[];
filename = file.list();
for (int i = 0; i < filename.length; i++) {
System.out.println(filename[i]);
}把文件名都读出来先 总死不了机吧
可是楼主大概会有70万个文件阿
就是说你那个filename的数组会有70万个元素,这大概会导致内存溢出,就是OutOfMemory错误
package dummy;import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;public class Dummy2 { /**
* @param args
*/
public static void main(String[] args) {
File dir = new File("D:\\tomcat5.5\\logs");
FilenameFilter filter = new TimeFileFilter("^(localhost)[\\d-\\.]{1,}log$"); //正则表达式, 这里只读出以localhost开头, 以log结尾, 的那些日志
String[] fileList = dir.list(filter);
for(String s: fileList){
System.out.println(s);
}
}
}class TimeFileFilter implements FilenameFilter{ private String fileNamePattern;
public TimeFileFilter(){};
public TimeFileFilter(String regex){
setFileNamePattern(regex);
}
public String getFileNamePattern() {
return fileNamePattern;
} public void setFileNamePattern(String fileNamePattern) {
this.fileNamePattern = fileNamePattern;
} @Override
public boolean accept(File dir, String name) {
return Pattern.matches(fileNamePattern, name);
}
}