例如 test.txt初始格式如下
    aaaa
    bbbb
    cccc
   十秒后变成
    aaaa
    bbbb
    cccc
    dddd
为了提高效率现只读取新增的那条数据 如何实现?

解决方案 »

  1.   

    tail -f -n 10 /test.txt
      

  2.   

    可以用LineNumberReader来读指定的行。
    一开始lz肯定不知道新增了多少行,可以用LineNumberReader来知道原来的行数和新增后的行数,
    这样一来就知道新增了多少行。
    然后读取指定的那几行。
      

  3.   

    上次读完后、记录一下位置、下次使用skip方法直接跳过。
      

  4.   


    lineNumberReader 的setLineNumber不知道何用 setLineNumber(3) 读取文件也是从首行开始读的,读完文件后getLineNumber会比文件的总行数多三。
      

  5.   

    用RandomAccessFile,直接直接seek到指定的位置其实使用FileInputStream也是可以的,因为里面的skip方法是native方法,可以直接定位文件位置的
      

  6.   

    ZK的实现代码 读取LOG文件内容新增会只读新增部分。
    List logList =new ArrayList();
    java.io.File f = new java.io.File("D://ZKworkspace//ReadFile//test.txt");
    java.io.RandomAccessFile raf = new java.io.RandomAccessFile(f,"r");long lastSeek = 0;
    ListModel strset = new SimpleListModel(logList);void ReadFile() throws java.io.IOException{
    List arrayList = new ArrayList();
    String str = null;
    raf.seek(lastSeek);
    while((str = raf.readLine())!=null){
    arrayList.add(str);
    }
    lastSeek = raf.length();
    logList.addAll(arrayList);
    ListModel strset1 = new SimpleListModel(logList);
    list.model=strset1;
    }
      

  7.   


    public class RandomAccess {
    static java.io.File f = new java.io.File("E:/工作/桌面/r.txt");
    static long lastSeek = 0; public static void main(String[] args) throws Throwable {
    ReadFile();
    //等待 10 S 后再读取新增的内容
    Thread.sleep(10000);
    ReadFile();
    } static void ReadFile() throws java.io.IOException {
    java.io.RandomAccessFile raf = new java.io.RandomAccessFile(f, "r");
    String str = null;
    raf.seek(lastSeek);
    while ((str = raf.readLine()) != null) {
    System.out.println(str);
    }
    lastSeek = raf.length();
    }}