连续文件(同一行)在java中读取

时间:2015-03-20 15:07:26

标签: java file

对于我的应用程序,我需要不断读取文件,应用程序将继续从该文件中读取100。我正在写入文件的同一行,即我覆盖了文件内容。但是我的程序在循环的每次迭代之后读取下一行。我的代码:

public class h{
  private int flag=0;
  public void scan() 
  {
    String filename="file1.txt";
    try{
      int i,j;
      int nooflines=1;
      String textData = new String();
      try{          
        FileReader fr = new FileReader(filename);
        BufferedReader textReader = new BufferedReader(fr);
        while(flag==0){
          textData=textReader.readLine();
          if(textData==null){
            Thread.sleep(3000);
            continue;
          }
          process(textData);
        }
        textReader.close();
      }catch(InterruptedException e){
        System.out.println(e.getMessage());
      }
    }catch (IOException e){
      System.out.println(e.getMessage());
    }        
  }
  public void process(String data){
    if(data.equals("100")){
      System.out.println(data);
      flag=1;
    }
  }

}

因此,在一次迭代后,我的代码将扫描第二行,但是使用写入模式(-w)打开file1.txt,写入模式擦除其内容并在文件的开头写入。那么如何编辑我的程序以继续扫描文件的第一行呢?

2 个答案:

答案 0 :(得分:0)

每隔3秒从头开始阅读文件:

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
            while(keepReading) {
               keepReading = process(br.readLine());
            }
        }
    }
}, 0, 3, TimeUnit.SECONDS); // every 3s

public boolean process(String data) {
    // do something
    return data != null && !data.equals("100");
}

答案 1 :(得分:0)

我认为这样做了。

    BufferedReader textReader;
    while(flag==0){
      textReader = new BufferedReader(new FileReader(filename));
      textData=textReader.readLine();
      if(textData==null){
        Thread.sleep(3000);
        continue;
      }
      process(textData);
    }