【发布时间】:2017-12-25 20:41:59
【问题描述】:
我想读取另一个应用程序/进程正在写入的文件。
我在另一个问题中找到的这段代码可以完成这项工作:它在写入文件时读取文件,并且只读取新内容。
即使没有数据添加到文件中也消耗大量CPU的问题。如何优化这段代码?
- 使用计时器?或 thread.sleep 暂停?
要补充一点,我正在尝试编写的整个程序会实时读取文件并处理其内容。所以这意味着 thread.sleep 或计时器将暂停我的整个程序。我正在寻找的理想改进不是等待几秒钟,而是等待某个事件发生 => 添加了新数据。这可能吗?
public class FileReader {
public static void main(String args[]) throws Exception {
if(args.length>0){
File file = new File(args[0]);
System.out.println(file.getAbsolutePath());
if(file.exists() && file.canRead()){
long fileLength = file.length();
readFile(file,0L);
while(true){
if(fileLength<file.length()){
readFile(file,fileLength);
fileLength=file.length();
}
}
}
}else{
System.out.println("no file to read");
}
}
public static void readFile(File file,Long fileLength) throws IOException {
String line = null;
BufferedReader in = new BufferedReader(new java.io.FileReader(file));
in.skip(fileLength);
while((line = in.readLine()) != null)
{
System.out.println(line);
}
in.close();
}
}
【问题讨论】:
标签: java multithreading file