栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java 监听文件内容

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 监听文件内容

计算机中的要实现实时都是主要有两种思路,第一种就是计算机再做了某个事件过程后去通知某个人,第二种就是一个人一直盯着要被监督的对象,发现他发生改变就做出相应反应。

代码实现思路

新线程==>死循环读文件==>记录文件最新位置==>记录每次最新写入==>写入内容处理

代码实现效果:

上述写入提交是实时的,图片没法展示。

实现代码如下:

监听文件模板,每次监听到文件返回监听到的内容,对内容进行相应处理。

packagesrc.listener;public abstract class BaseFileListenner implementsRunnable{public voidlisten(){

String s=listenNewLine();

doService(s);

}public abstractString listenNewLine();public abstract voiddoService(String s);

}

代码的具体实现类,监听到内容,将内容打印到控制台。

package src.listener;

import org.apache.commons.lang.StringUtils;

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

import java.nio.charset.StandardCharsets;

import java.util.concurrent.TimeUnit;

public class FileListenner extends BaseFileListenner{

private long lastModifyTime = 0L;

private long seekPosition = 0L;

private String filePath;

public String getFilePath() {

return filePath;

}

public void setFilePath(String filePath) {

this.filePath = filePath;

}

@Override

public void run() {

while (true) {

listen();

try {

TimeUnit.MILLISECONDS.sleep(500L);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

@Override

public String listenNewLine() {

String result = null;

try {

File listenFile = new File(filePath);

if (listenFile.lastModified() > lastModifyTime) {

lastModifyTime = listenFile.lastModified();

RandomAccessFile file = new RandomAccessFile(listenFile, "r");

file.seek(seekPosition);

byte[] bytes = new byte[(int) (file.length() - seekPosition)];

seekPosition = file.length();

file.read(bytes);

result = new String(bytes, StandardCharsets.UTF_8);

}

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

@Override

public void doService(String s) {

if (StringUtils.isNotBlank(s)) {

System.err.print(s);

}

}

public static void main(String[] args) {

// FileListenner fileListenner = new FileListenner();

// fileListenner.setFilePath("D:\company\ruigu_pro\scala-ding\src\main\scala\dm\test\readme.txt");

// new Thread(fileListenner).start();

FileListenner fileListenner1 = new FileListenner();

fileListenner1.setFilePath("D:\company\ruigu_pro\scala-ding\src\main\scala\dm\test\test.txt");

new Thread(fileListenner1).start();

}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985165.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号