我需要解析 70万个文本文件 。在同一个目录下。
有什么缓和点的办法没有??速度慢点不要紧,就是不要一运行就cpu占用>95%。 文件命名算是有规律:M.1220331974.C4 
第一个M 基本固定不变,中间的10个数字和时间有关,最后的两个“16进制”为了避免重名的,不能确定。有什么办法?别想file.filelist()处理,一次性把70万个文件全部读取。我怕死机~~~ps :linux下运行~~
 加上 & 命令,让程序作为后台 能不能有效果??

解决方案 »

  1.   

    1.写一个方法生成文件名,返回一个String的文件名
    2.写一个读取文件的方法,参数为上一个方法的返回值
    3.读取文件推荐用BufferedReader,并设置一个缓存
    4.循环生成文件名,然后读取,直到找不到那个文件为止,说明读取完毕
    5.在linux中写一个shell启动这个程序,被设置为后台
      

  2.   

    ls的在说什么啊...listFiles(FilenameFilter filter) 
    用这个...你的文件名是有时间规律的,那就容易分组
    每读一组处理完后,更改文件名过滤器继续下一次
      

  3.   


    我不是打开后怎么处理,打开后文本并不大。
    我现在的问题是文件数量太多,获取文件列表就能导致死机。
    file.filelist() 就是获取全部文件,把70万个文件全部存入到数组中了·~~
    有没有一次获取少量的文件的办法?
      

  4.   

    lovecj6185 的思路我很赞同。
    文件名是有规律,但是要写出来还是很难的。文件名中的数字是按时间生成的,但是并不连续·~~后面的两个“16进制”也是随机生成的·~
      

  5.   

    M.1205806875.22
    M.1206077548.xi
    M.1206113514.AF
    M.1206456850.j7这就是那些文件名
      

  6.   

    tar一下?记忆中tar不改变文件.只是连接.
      

  7.   

    linux命令?这条路能不能走通?ls通道?我不太懂linux·~可不可以 ls| *** 把ls 的结果 输出到一个文本文件,作为文件名列表???
      

  8.   

    File file = new File("D:\\");
    String filename[];
    filename = file.list();
    for (int i = 0; i < filename.length; i++) {
    System.out.println(filename[i]);
    }把文件名都读出来先  总死不了机吧
      

  9.   

    楼上的朋友,读出文件名可能没事
    可是楼主大概会有70万个文件阿
    就是说你那个filename的数组会有70万个元素,这大概会导致内存溢出,就是OutOfMemory错误
      

  10.   


    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);
    }
    }