File Watcher,不只是一个工具

6 篇文章 0 订阅
3 篇文章 0 订阅

File Watcher不只是一个工具,还是一种语言,同时又是一个轻量级的Java第三方库。

作为工具

简介

File Watcher是这样一个通用的命令行工具:

  1. 监控文件(夹)变化,包括文件(夹)的创建、修改、删除
  2. 文件变化时能够自动运行指定的命令
  3. 方便用户配置要监控的文件(夹),能够定义丰富灵活的过滤规则
  4. 每个用户都可以有自己的配置,不同用户的配置可以不相同
  5. 被触发运行的命令可以是shell命令,shell脚本,也可以是某种编程语言代码
  6. 命令可以是同步执行,也可以是异步执行
  7. 容易定制,配置灵活,方便扩展。
  8. 跨平台,至少支持Windows和Linux
  9. 绿色版发布,无需安装,不需要管理员权限也能使用

使用方法

java -jar filewatcher.jar [fw_file_path]

其中,fw_file_path是一个可省略的参数,表示fw文件的路径或者是文件夹,fw文件是一种采用fw语言描述的脚本,以fw为扩展名。如果fw_file_path是一个文件,则执行fw文件定义的语言来监控相应的文件(夹);如果fw_file_path是文件夹,则执行文件夹下的所有fw文件;如果没有指定,则相当于指定当前文件夹。

作为一种特定语言

File Watcher可以作为语言fw的虚拟机执行器,下面是fw语言的语法:

start to 非递归启动一个观察器watcher,fw文件可以有一个到多个观察器,也就是说start语句可以有多个
start recursive 递归启动一个观察器
stop to 关闭观察器
watch 观察某路径,后面跟着一个字符串,指定要观察的路径
filter 定义过滤条件,后面跟着include或者exclude,include表示要的条件,而exclude表示排除的条件。
async 异步执行代码
on file modified 当文件修改时调用紧跟着的代码块

上面列出部分关键字和语法,更多请联系作者wenzhe。下面给出例子:

  start recursively watch "E:/wenzhe/aa" \
  filter include extension (
    "txt"
  ) filter exclude file name contains "123" \
  on file modified { updatedFile ->
    async {
      println "file $updatedFile modifieddddd"
    }
  } on file modified { updatedFile ->
    println "open notepad"
    //  "notepad '$updatedFile'".execute()
  }

  start to watch "E:/wenzhe/bb" \
  on file and folder updated { updatedFile, updatedType ->
    println "file $updatedFile $updatedType"
  }

作为一个轻量级的Java第三方库

org.wenzhe.filewatcher可以作为第三方库方便用于你的Java应用中,非常轻量级,它大小只有36KB,跨平台,它不依赖于Groovy,只依赖常用的jar,如下:

org.wenzhe.filewatcher的依赖包

依赖的库也很常用很轻量级,而且都是开源免费可商用的license。

File Watcher作为Java第三方库,底层使用Java 7的WatchService,但使用更加方便灵活,而且更加强大,

特性Java 7的WatchServiceFile Watcher库
监控文件夹支持支持
递归地监控文件夹及其子文件夹不支持支持
监控普通文件不支持支持


File Watcher作为Java第三方库的使用方法可以是:

下面是一个使用org.wenzhe.filewatcher的例子,如下:

public class FileWatcherTest1 {

  public static void main(String[] args) {
    FileWatcherExecutor.execute(ctx -> {

      ctx.start(recursively).watch("E:/wenzhe/aa")
      .filter(include).extension("txt")
      .filter(exclude).file(name).contains("123")
      .on(file).modified(updatedFile ->
        async(() -> {
          System.out.printf("file %s modifieddddd\n", updatedFile);
        })
      )
      .on(file).modified(updatedFile -> {
        System.out.println("open notepad");
        try {
          Runtime.getRuntime().exec(String.format("notepad '%s'", updatedFile));
        } catch (Exception e) {
          e.printStackTrace();
        }
      });

      ctx.start(to).watch("E:/wenzhe/bb")
      .on(file).updated((updatedFile, updatedType) -> {
        System.out.printf("file %s %s\n", updatedFile, updatedType);
      });
    });

    while (true) {

    }
  }

}

设计文档

  1. 需求分析:基于领域特定语言(DSL)的用例驱动开发(UDD)
  2. 技术实现:实验驱动开发与响应式编程 —- File Watcher的技术实现

源码

  1. File Watcher核心库:https://github.com/WenzheLiu/filewatcher
  2. File Watcher应用:https://github.com/WenzheLiu/filewatcher.app

—– 本博客所有内容均为原创,转载请注明作者和出处 ——–

作者:刘文哲

联系方式:liuwenzhe2008@qq.com

博客:http://blog.csdn.net/liuwenzhe2008

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值