如何在 Java 中读取文件 updated/modified?
How to read file as it gets updated/modified in Java?
我正在尝试监控“.txt”文件并在使用以下方法更新时从中读取数据。
public void startFileMonitoring() throws InterruptedException {
log.info("Here");
String filePath = "file.txt";
File file = new File(filePath);
long lastModified = -1;
do {
try {
if (lastModified != file.lastModified()) {
RandomAccessFile in = new RandomAccessFile(filePath, "r");
String data = in.readLine();
log.info("Read Data : "+data+"\tdata length : "+data);
lastModified = file.lastModified();
in.close();
}
} catch (IOException e) {
log.error("Exception while reading file");
e.printStackTrace();
}
}while(true);
}
有趣的是,这个方法能够正确读取 lastModified 时间。因此,每当我们更新文件中的任何内容时,它都会尝试读取该文件。
问题是,它不获取任何数据(给出空值)。
我错过了什么?
日志:文件最初有字符串“abc”。我把它改成了“abcd”。
2021-04-01 10:44:06.929 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : abc
2021-04-01 10:44:11.626 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : null
2021-04-01 10:44:18.402 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : null
非常奇怪的解决方案。调试时尝试打印 RandomAccess in
的对象引用并且代码有效。
这里是更新的代码:
public void startFileMonitoring(){
log.info("Here");
String filePath = "file.txt";
File file = new File(filePath);
long lastModified = -1;
do {
try {
if (lastModified != file.lastModified()) {
RandomAccessFile in = new RandomAccessFile(filePath, "r");
//in.seek(0L);
log.info("in : {}",in);
String data = in.readLine();
if(data == null) {
log.info("Data null here, in: {}",in);
}
if (data != null && applicationData.getSeenLinesFromFile().add(data)) {
applicationData.getLineDataToRead().add(data);
}
log.info("Read Data : " + data+"\tfile : "+file+"\tlasModified : "+lastModified);
lastModified = file.lastModified();
}
} catch (IOException e) {
log.error("Exception while reading file");
e.printStackTrace();
}
}while(true);
}
我正在尝试监控“.txt”文件并在使用以下方法更新时从中读取数据。
public void startFileMonitoring() throws InterruptedException {
log.info("Here");
String filePath = "file.txt";
File file = new File(filePath);
long lastModified = -1;
do {
try {
if (lastModified != file.lastModified()) {
RandomAccessFile in = new RandomAccessFile(filePath, "r");
String data = in.readLine();
log.info("Read Data : "+data+"\tdata length : "+data);
lastModified = file.lastModified();
in.close();
}
} catch (IOException e) {
log.error("Exception while reading file");
e.printStackTrace();
}
}while(true);
}
有趣的是,这个方法能够正确读取 lastModified 时间。因此,每当我们更新文件中的任何内容时,它都会尝试读取该文件。 问题是,它不获取任何数据(给出空值)。
我错过了什么?
日志:文件最初有字符串“abc”。我把它改成了“abcd”。
2021-04-01 10:44:06.929 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : abc
2021-04-01 10:44:11.626 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : null
2021-04-01 10:44:18.402 INFO 12760 --- [ task-1] com.service.FileReadingService : Read Data : null
非常奇怪的解决方案。调试时尝试打印 RandomAccess in
的对象引用并且代码有效。
这里是更新的代码:
public void startFileMonitoring(){
log.info("Here");
String filePath = "file.txt";
File file = new File(filePath);
long lastModified = -1;
do {
try {
if (lastModified != file.lastModified()) {
RandomAccessFile in = new RandomAccessFile(filePath, "r");
//in.seek(0L);
log.info("in : {}",in);
String data = in.readLine();
if(data == null) {
log.info("Data null here, in: {}",in);
}
if (data != null && applicationData.getSeenLinesFromFile().add(data)) {
applicationData.getLineDataToRead().add(data);
}
log.info("Read Data : " + data+"\tfile : "+file+"\tlasModified : "+lastModified);
lastModified = file.lastModified();
}
} catch (IOException e) {
log.error("Exception while reading file");
e.printStackTrace();
}
}while(true);
}