【发布时间】:2011-02-01 23:57:48
【问题描述】:
我需要能够用 Java 模仿“tail -f”。我正在尝试读取一个日志文件,因为它正在由另一个进程写入,但是当我打开文件来读取它时,它会锁定文件并且其他进程无法再写入它。任何帮助将不胜感激!
这是我目前使用的代码:
public void read(){
Scanner fp = null;
try{
fp = new Scanner(new FileReader(this.filename));
fp.useDelimiter("\n");
}catch(java.io.FileNotFoundException e){
System.out.println("java.io.FileNotFoundException e");
}
while(true){
if(fp.hasNext()){
this.parse(fp.next());
}
}
}
【问题讨论】:
-
如果没有其他方法,您可以使用 jni 来访问 win32 api(假设您在 windows 上,否则无论您使用什么 api)。
-
使用 win32 api 将是最丑陋的事情 ;)
-
嘿,因为我不太了解 Java,这是我最好的建议 :)
-
我选择 Java 是为了实现可移植性,所以这不是一个选项。尽管 Cshah 在我回家时提到过,但我将研究 FileChannel API。感谢您的帮助
-
JNI 建议太离谱了。正是 Win32 API 在此处执行锁定。 Java 不这样做。使用 FileChannel 也无济于事。我会审查整个要求。日志文件不是要解析的,它们是供人类使用的。如果您需要从应用程序的另一部分进行通信,请使用 Socket 或数据库。