如何实现文件监控+读取文件内容
 如题,现在要用java实现监控一个文件夹新增的文件(如一个txt文件,有几个字符),本人使用JNotify可以实现文件夹监控,即该txt文件新增至监控文件夹内,后台提示路径跟文件名,现想取文件中的数据,提示另外的程序正在使用,进程无法访问。请问大家有实现的吗?或者使用其他插件实现也可以?如何在新文件进入得到路径名称后取消对该文件的监控?

2个回答

使用 commons-io 中的文件监控
[code="java"]package org.demo.file;

import java.util.concurrent.TimeUnit;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**

  • 文件监控测试
  • @author
  • @date 2010-11-16
  • @file org.demo.file.FileMonitor.java
    */
    public class FileMonitorTest {

    /**

    • @param args
    • @throws Exception */ public static void main(String[] args) throws Exception { // 监控目录 String rootDir = "d:\Temp"; // 轮询间隔 5 秒 long interval = TimeUnit.SECONDS.toMillis(5); // FileAlterationObserver observer = new FileAlterationObserver( rootDir, FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".java")), null); observer.addListener(new MyFileListener()); FileAlterationMonitor monitor = new FileAlterationMonitor(interval,observer); // 开始监控 monitor.start(); } }[/code] [code="java"]package org.demo.file;

import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;

/**

  • 自定义文件监听器
  • @author
  • @date 2010-11-16
  • @file org.demo.file.MyFileListener.java */ public class MyFileListener extends FileAlterationListenerAdaptor{ @Override public void onFileCreate(File file) { System.out.println("[新建]:" + file.getAbsolutePath()); } @Override public void onFileChange(File file) { System.out.println("[修改]:" + file.getAbsolutePath()); } @Override public void onFileDelete(File file) { System.out.println("[删除]:" + file.getAbsolutePath()); } }[/code]
fxltsbl
fxltsbl 如果文件内容变化了,能监控到变化的内容吗?(比如日志文件,应用程序在不断追加写入,实时获取到新增的内容)
接近 4 年之前 回复

是不是在程序中读完文件后没有释放资源?如果不释放的话就会一直占用文件出现被锁的情况。
[code="java"] BufferedReader buf = null;
try {
buf = new BufferedReader(new FileReader(file));
System.out.println(buf.readLine());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 这里释放系统 IO 资源
try {if (buf != null){buf.close();}}catch (Exception e){}
}[/code]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

如何实现文件监控+读取文件内容

如题,现在要用java实现监控一个文件夹新增的文件(如一个txt文件,有几个字符),本人使用JNotify可以实现文件夹监控,即该txt文件新增至监控文件夹内,后台提示路径跟文件名,现想取文件中的数据,提示另外的程序正在使用,进程无法访问。请问大家有实现的吗?或者使用其他插件实现也可以?如何在新文件进入得到路径名称后取消对该文件的监控?

怎么用java实现定时读取文件

用timer类实现定时,我不知道在run()方法中怎么实现读取文件。

Logstash 读取日志文件,增量

input { file { path => "/usr/local/elk/mos-log/mt.log" type => "mos-mt-log" codec => multiline { pattern => "^\[" negate => true what => "next" } start_position => "end" } file { path => "/usr/local/elk/mos-log/rpt.log" type => "mos-rpt-log" codec => multiline { pattern => "^\[" negate => true what => "next" } start_position => "end" } } 这是conf文件中的input,再我每往日志文件手动添加一条日志时,logstash总是从头读取一遍,怎么样使logstash只去读取我新添加的日志

这是一个java 的文件监控目录下的变化,发生变化进行处理。

public void run() { WatchService watchService; try { watchService = FileSystems.getDefault().newWatchService(); Paths.get(watchedPath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE); while(true) { WatchKey key=watchService.take(); for(WatchEvent<?> event:key.pollEvents()) { WatchEvent<Path> ev = cast(event); Path name = ev.context(); if(ftpUser == null || ftpUser.equals("")){ //本地local FtpUtil.copyFile(name.toFile(),localPath,watchedPath); }else{ // FtpUtil.uploadFile(name.toFile(), localPath, "ftp.properties",watchedPath); //ftp FtpUtil.uploadFile(name.toFile(), localPath, ftpUser,watchedPath); //ftp } } boolean reset = key.reset(); if (!reset) break; } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 复制单个文件 * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt * @return boolean */ public static void copyFile(File newFile, String newPath,String oldPath) { InputStream inStream = null; FileOutputStream fs = null; try { int bytesum = 0; int byteread = 0; String filePath = oldPath +"\\"+newFile; File oldfile = new File(filePath); if (oldfile.exists()) { // 文件存在时 inStream = new FileInputStream(filePath); // 读入原文件 fs = new FileOutputStream(newPath+"\\"+newFile); byte[] buffer = new byte[1444]; int length; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; // 字节数 文件大小 fs.write(buffer, 0, byteread); } System.out.println("aaa"); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); }finally{ try { if(null!=fs){ fs.close(); } if(null!=inStream){ inStream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("bbb"); } } java.io.FileNotFoundException: D:\text1\新建文本文档 (2).txt (另一个程序正在使用此文件,进程无法访问。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at java.io.FileInputStream.<init>(FileInputStream.java:97) at com.rihang.util.FtpUtil.copyFile(FtpUtil.java:143) at com.rihang.publicserviceproduct.FileWatcherThread.run(FileWatcherThread.java:68) 上边是代码和异常,我要做的是,当监控的目录下多了一个文件的时候就将该文件copy 到其他目录下。现在第一次没问题。第二次在放如监控目录下一个文件时就提示这个异常。但是我如果在inStream = new FileInputStream(filePath); 这行打个断点停顿下就没这个问题了。在线求解。

spark streaming监控hdfs的文件变化

spark streaming中有对hdfs中新增文件的监控,但是如何对具体的某个文件进行监控呢,比如文件a后面增加了一行,如何才能get到这个信息呢 ![图片说明](https://img-ask.csdn.net/upload/201610/08/1475916517_4375.jpg)

win10中 启动logstash file插件 无法读取文件

``` input{ file{ path => "D:\User\gu\soft\reviceLogs\cc_reports.txt" start_position => "beginning" } } filter{ csv { separator => "," columns => ["id","user","test"] skip_empty_rows =>"true" remove_field => ['@timestamp', '@version','message','host','path'] } } output{ stdout{ codec => rubydebug } } ```logstash配置如图, 如果输入改成stdin的话 可以打印, 改成file插件却不能读取文件。 logstash开启后,会生成sincedb文件,这个应该能表明他是读了的吧,但是sincedb是0kb,应该表示没读取到内容, ![图片说明](https://img-ask.csdn.net/upload/201908/13/1565709233_169505.png), 求解,这是怎么回事呢?

android上层读取文件节点问题

可以写入成功,但是读出异常,提示bad address,有碰到相同情况的吗?

PDF文件读取图形数据分析

有谁做过PDF文件数据的读取吗? ![图片说明](https://img-ask.csdn.net/upload/201703/01/1488333871_908491.png) 这样一个图形读到如下数据: /OC /MC0 BDC q 0 4251.97 4251.97 -4251.97 re W n 0 0 0 RG 0 w 4 M 1 j 1 J /GS0 gs q 1 0 0 1 962.1284 2283.5767 cm 0 0 m 31.928 47.207 89.951 66.088 159.585 75.53 c 229.223 84.972 419.272 99.134 464.238 91.279 c 509.215 83.404 564.348 51.928 574.506 -22.037 c 579.646 -59.518 574.506 -253.357 y 571.599 -306.853 545.485 -338.33 v 519.373 -369.803 478.757 -379.246 459.886 -379.246 c 441.034 -379.246 311.912 -382.399 262.594 -377.677 c 124.761 -365.083 88.5 -355.641 v 52.228 -346.199 -8.711 -308.42 -17.407 -250.213 c -26.112 -191.986 -26.112 -113.3 -20.314 -66.093 c -14.5 -18.884 0 0 y S Q EMC Q 请问 c结尾的数据是弧,那么 579.646 -59.518 574.506 -253.357 y 571.599 -306.853 545.485 -338.33 v y和v结尾的是什么数据?

golang:监视(和读取)文件以供写入

<div class="post-text" itemprop="text"> <p>I have some .log files and want to monitor if any data is appended to any of them to collect that data into a DB.<br> How do I open an opened-for-writing file and how do I monitor for new lines/changes?<br> Thank you.</p> </div>

windows 文件系统过滤驱动如何获取到文件读写请求的内容?

windows 文件系统过滤驱动,获取到文件读写 IRP请求后,如何获取到文件读写请求的内容?(比方说往一个文件中写abc三个字符,如何获取到写的“abc”这个字符串)

java文件里搜索文件关键字

文件夹里有很多种类的文件.xls、.txt、.ppt、.excel等文件,需要根据查询的关键字查询这些文件中是否包含

Windows VC++编程问题,如何获取文件粘贴事件,在粘贴事件执行前做一些操作。

Windows VC++编程问题,如何获取文件粘贴事件,在粘贴事件执行前做一些操作。 我在做一个远控软件,但我想让我的远控软件支持远程复制粘贴,在本地复制后,粘贴到远程桌面,但复制后不想立即传输到远程端电脑,我是希望能本地复制后,更新远端电脑的剪贴板信息,等远端执行粘贴命令时,传输到远程端,然后进行粘贴,不太清楚OLE剪贴板是否能解决我的问题,对OLE剪贴板我还不是很了解。 本人最开始有以下两个计划,但总觉得Hook技术偶尔不是很稳定,希望能有不需要Hook的方法: 1.本地复制,发送到远程端文件列表信息更新剪贴板,然后判断到复制的是文件时,远程端Hook粘贴函数,等粘贴函数执行的时候,发送到控制端粘贴命令,然后发给远程端粘贴。 2.本地复制,发送到远端文件列表信息更新剪贴板,远程端临时创建几个与被复制同名的文件,将剪贴板的信息设置为这几个临时文件,然后Hook住这几个文件的读写函数,等读取这几个文件的时候,通知控制端进行传输,传输完成后继续这几个文件的读取。 本人看过VNC的源码,里面貌似没有文件远程复制粘贴功能,只有文件远程传输功能,但我想直接加入复制粘贴功能,跪求各位大神有没有什么好的方法,尽量不使用Hook进行文件传输,本人监控过TeamViewer的文件复制粘贴,但TV好像是注册了一种剪贴板数据类型,使用OLE剪贴板进行文件粘贴,但具体怎么实现的我不清楚。

linux io 读取文件问题

![图片说明](https://img-ask.csdn.net/upload/201504/05/1428248129_272877.jpg) 我遇到一个困扰了我很久的问题, 到时我项目挂掉好多次, 每次读硬盘过高时,项目就会挂, 我现在想问的是: 谁能告诉我, 是读哪些文件名字? linux 下面怎么查看呢...我不需要实时监控的vmstat,iostat命令哦..

如何使logstash远程监控另一台windows上的日志文件变化

因为业务上的原因,现在想使用logstash来远程监控一台windows上面的日志变化(windows是台UAT部署机,不想装别的软件),logstash的shipper.conf怎么写?主要是选用哪个input的插件及配置大概怎么写,用file的话,好像得把logstash在那台UAT上装一次才能监控文件夹的变化...求大神指教..感激不尽

求教,用程序读取多个文件信息并统计这个代码如何实现呢?

我有48个文件,文件名从1到48,里面的数据像这样![图片说明](https://img-ask.csdn.net/upload/201707/14/1499999221_215742.png) 现在需要提取文字行中的数据比如第一行的11和001作为一个对,存储下边若干条的数据,标准的时间转化成秒,求教怎么办,急

如何在程序里监听另一个程序打开文件、关闭文件

需求:从服务器下载一个文件,用程序打开文件、编辑保存,在程序关闭时捕获 关闭事件将修改后的文件自动上传到服务器。

在c#中怎么配置一个文件,监听是否有.jpg文件传送过来

在c#中怎么配置一个文件,监听是否有.jpg文件传送过来,有的话执行打印并删除。

[java]为什么我IO读写文件的速度逐渐变慢,刚开始特别快

标题说的不太详细 就是我的程序不断的往一个*.dat文件中追加手机号,一行一个,刚开始第一次运行的时候,没有文件,创建然后写 速度都很快,当我的文件越来越大,其实也不大,就100行左右,我要继续追加,然而速度就变得越来越慢 刚开始写200多个文件一共30-40ms,现在是300-500ms 这是为什么? 参考代码 监控中发现就这俩方法耗时间 ``` void pickOne(File f, String fingerprint) { long ts = System.currentTimeMillis(); try (FileInputStream fis = new FileInputStream(f)) { String name = f.getName().split("\\.")[0]; PerfLogging.info("Loading ..... " + fingerprint + "/" + name + " from " + f.getAbsolutePath() + " ..... "); BufferedReader buf = new BufferedReader(new InputStreamReader(fis)); String line = null; while ((line = buf.readLine()) != null) { addPhone(name, line); } buf.close(); ts = System.currentTimeMillis() - ts; PerfLogging.info("time elapsed " + ts + "ms"); } catch (Exception e) { e.printStackTrace(); } } public void dump(String basedir) { File dir = new File(basedir, this.preHash); for (Entry<String, Set<String>> en : this.hTab.entrySet()) { String pre2 = en.getKey(); try (FileOutputStream fos = new FileOutputStream(new File(dir, pre2 + ".dat"))) { for (String s : en.getValue()) { fos.write((s + "\n").getBytes()); } } catch (Exception e) { e.printStackTrace(); } } } ``` 这个代码不是我写的,我查到这个 java1.7特性,叫做try-with-resource,实现了AutoCloseable接口的实例可以放在try(...)中在离开try块时将自动调用close()方法。该方法调用可以看做在finally块中,所以资源的释放一定会执行,不过能不能成功释放还是得看close方法是否正常返回。 还有,我的服务器有40个G的内存,即使开给它还是很慢 我读取的是*.dat文件,不是二进制文件,可以理解成是txt类型的文件 我测试的时候,在第一次运行的时候,特别快,十分之一 但是多运行几次后,速度直线下降

.bat文件没有从ip.txt中循环读取并输出结果,只是输出读取了第一行ip的结果。ip.txt每行一个ip地址。求助大神

``` echo off chcp 65001 @mode con lines=13 cols=80 title ★★网络ip循环监控中 请勿关闭★★ color 17 :go for /f %%i in (ip.txt) do ( set i=%%i ping %%i -w 100 -n 2 if errorlevel 1 goto error ) echo . echo 指定IP全部在线,10秒后再次轮询 choice /t 10 /d y /n >nul goto go :error chcp 65001 echo %date:~3,10% %time% %i% >> NetworkIpLog.txt choice /t 30 /d y /n >nul goto go ```

无法使用cURL打开本地文件

<div class="post-text" itemprop="text"> <p>Hi,</p> <p>I am using this code:</p> <pre><code>$curl_handle=curl_init(); curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . '../../blog/index.php'); $xml_file = curl_exec($curl_handle); preg_match("/&lt;title&gt;(.*)&lt;\/title&gt;/i", $xml_file, $matches); $title= $matches[1]; curl_close($curl_handle); $title= $matches[1]; </code></pre> <p>This code is supposed to open one local file and search for the title tag to have it as a variable value. But despite no error is displayed I am getting nothing as $title. What could be wrong?</p> <p>Thank you.</p> </div>

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐