不断读取附加到日志文件的行

ant*_*ant 6 java

关于我之前的问题,我发现maven无法真正输出jboss控制台.所以我想我想解决它.这是交易:

当jboss正在运行时,它会将控制台日志写入server.log文件,因此我正在尝试检索数据,因为每隔几秒钟文件就会被jboss更改/更新我遇到了一些困难所以我需要救命.

我真正需要的是:

  1. 读取文件server.log
  2. 当server.log被更改时,添加更多行输出更改

这是我到目前为止的代码,它有一个问题,它无限期运行,每次从文件的开头开始,我希望它继续打印来自server.log的新行.希望它在某种意义上是代码:

import java.io.*;


class FileRead 
{
   public static void main(String args[])
  {
      try{
   for(;;){ //run indefinitely
    // Open the file 
    FileInputStream fstream = new FileInputStream("C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
    }
    //Close the input stream
    in.close();
    }
  }
      catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

根据Montecristo的建议,我这样做了:

import java.io.*;

class FileRead {
    public static void main(String args[]) {
        try {
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream(
                    "C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String line;
            // Read File Line By Line
            while ((line = br.readLine()) != null) {
                // Print the content on the console
                line = br.readLine();
                if (line == null) {
                    Thread.sleep(1000);
                } else {
                    System.out.println(line);
                }

            }
            // Close the input stream
            in.close();

        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它仍然无法正常工作,它只是打印原始文件..虽然文件不断变化但没有任何事情发生..除了原始日志文件之外什么都没打印出来.

这是解决方案: tnx Montecristo

import java.io.*;

class FileRead {
    public static void main(String args[]) {
        try {

            FileInputStream fstream = new FileInputStream(
                    "C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");

            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String line;

            while (true) {

                line = br.readLine();
                if (line == null) {
                    Thread.sleep(500);
                } else {
                    System.out.println(line);
                }

            }

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另见:

http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html

Alb*_*gni 2

我不知道你是否朝着正确的方向前进,但如果我理解正确,你会发现这很有用:java-io-implementation-of-unix-linux-tail-f