【发布时间】:2010-02-10 16:16:38
【问题描述】:
关于我之前的 question ,我发现 maven 并不能真正输出 jboss 控制台。所以我想我想解决它。这是交易:
当 jboss 运行时,它会将控制台日志写入 server.log 文件,所以我试图检索数据,因为每隔几秒钟文件就会被 jboss 更改/更新,我遇到了一些困难所以我需要帮助。
我真正需要的是:
- 读取文件 server.log
- 当更改 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());
}
}
}
根据 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());
}
}
}
它仍然无法正常工作,它只是打印了原始文件..虽然文件不断变化,但没有任何反应..除了原始日志文件之外什么都没有打印出来。
解决方案在这里: 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());
}
}
}
另见:
http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html
【问题讨论】:
-
@skaffman 不是重复的 .. 我仍然没有得到我的答案 .. 我需要它不断运行
-
我和 skaffman 链接的帖子中接受的答案确实持续运行......
-
@Montecristo 那么它没有重复的问题不是吗?因为 server.log 每隔几秒钟就会更改一次.. 我想将那些更改的行从 server.long 添加到我已经输出的控制台输出中(在输出的末尾)
-
您确定
while ((line = br.readLine()) != null)与while (keepReading)相同,然后根据BufferedReader阅读的内容而进行阅读/睡眠吗?我现在不能自己尝试,但我不认为它是......
标签: java