有一个数据采集程序每分钟都会采集数据放进一个txt文本,每分钟的数据就是一行,最新的数据会自动添加到下一行,一天就是一个文本,也就是第二天会重新生成一个以日期命名的文本
需求:写一个java程序不断读取最新的数据而不影响文件的正常更新

解决方案 »

  1.   


    boolean running = true;
    BufferedInputStream reader = new BufferedInputStream(new FileInputStream( "sample.txt" ) );public void run() {
        while( running ) {
            if( reader.available() > 0 ) {
                System.out.print( (char)reader.read() );
            }
            else {
                try {
                    sleep( 500 );
                }
                catch( InterruptedException ex ) {
                    running = false;
                }
            }
        }
    }
      

  2.   

    写个定时任务,去读取文件,每次读取完成后,把读取的行数保存下来,然后下次再从上次保存的行数下一行开始读取。File logFile = new File(logFullName);
    try {
    final RandomAccessFile randomFile = new RandomAccessFile(
    logFile, "r");
    try {
    //last_line是上次保存的是大行
    randomFile.seek(last_line);
    String lineStr;
    String result = "";
    while ((lineStr = randomFile.readLine()) != null) {

    }
    last_line = randomFile.length();
    } catch (IOException e) {
    // TODO Auto-generated catch block

    } finally {
    try {
    if (randomFile != null)
    randomFile.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    }
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    }
      

  3.   

    谢谢你的回答,可以完成需求,因为每分钟更新一行,所以如果能读取最新一行就完美了用 apache common ReversedLinesFileReader