假设需要处理一个大型文件,文件体积大于 1GB。现在需要根据条件从该文件中抽取10KB数据,并将这10KB数据从大型文件中加以删除。按照最简单的思路,就是将要抽取的数据输出到某个文件,再将未抽取的数据到另外一个文件,最后将原来的大型文件删除。这样虽然可以满足功能需求,但是明显很难有良好的性能。我想知道 Java 中有没有方法可以从一个文件中就地(in place)删除部分内容,而不需要输出一个新文件删除旧文件?==================================================
可以更具体的假设该文件的内容如下:CN-001-AAA-123
CN-002-AAA-231
US-001-FSS-343F
CN-890-DLS-11
UK-001-FFS-FFS9
DE-F89-AAA-899
...(以下省略100万行)需要从该文件中找出1000行以CN开头的数据,并将这些数据从文件中删除。
===================================================谢谢!

解决方案 »

  1.   

    我也觉得是。
    你想想,如果文件是分散开的,要怎么才能找到呢?
    只能是所有都遍历。想到一个办法,不知道能不能实现。
    用多线程,
    每个线程读一部分文件,如a读1--10M,2读11-20M。类推
    这样是否可以呢。
      

  2.   

    呵呵;如果Thread读取过程中出错了就麻烦了;这个很难缠,不过楼主那样做应该是普遍的用法吧
      

  3.   

    答案好像就是没有办法,只有在很特别的一些 case 中才能 in place 修改文件。
      

  4.   

    windows开线层是有限制的,开了10个上速度就非常慢了。而且这个好象是数据库来做的事情吧。
    文件太大,用io太慢了。