JAVA监控读取共享文件夹

来源:互联网 发布:瞻博网络 上海 电话 编辑:程序博客网 时间:2024/06/10 03:27

问题

  • 远程监控并读取某个系统的日志文件,判断文件是否已经写入完成,写入完成后读取到本地,并将远程文件删除。
  • 远程系统的环境可能是linux也可能是windows

解决思路

  • JAVA NIO 和 WATCHSERVICE
  • JCIFS

实现过程

  1. 在Eclipse中运行Oracle NIO and NIO.2 Examples中给出的实例代码WatchDir.java,(实际是在JDK Example中,在JDK下载页面的“Demos and Samples”部分可以下载)
    这里写图片描述
  2. 测试WatchDir对本地目录的支持

    • 在WatchDir.java中选择“Debug As”–“Debug Configuration”,WatchDir类的用法是“java WatchDir [-r] dir”,-r的可选选项代表是否遍历子文件夹,dir代表待监控的文件夹。在Debug Configuration的Arguments中添加本地目录“D:\tmp”,点击Debug
      这里写图片描述
    • 监测文件夹中添加和删除文件进行测试
      复制test.txt到该文件夹下,console中显示ENTRY_CREATE和ENTRY_MODIFY,删除该文件时显示ENTRY_DELETE
      这里写图片描述
  3. 在Linux中搭建samba服务
    所用Linux主机是Centos6.8,samba服务的搭建参考该文。
    安装所需组件:yum install samba samba-client
    samba配置文件(/etc/samba/smb.cnf)如下:

#======================= Global Settings =====================================[global]# ----------------------- Network Related Options -------------------------## workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH## server string is the equivalent of the NT Description field## netbios name can be used to specify a server name not tied to the hostname        workgroup = WORKGROUP        server string = David Samba Server Version %v        netbios name = DavidSamba# --------------------------- Logging Options -----------------------------## Log File let you specify where to put logs and how to split them up.        log file = /var/log/samba/log.%m# ----------------------- Standalone Server Options ------------------------## Scurity can be set to user, share(deprecated) or server(deprecated)        security = share#============================ Share Definitions ==============================[public]        comment = Public Stuff        path = /home/xdwang/tmp        public = yes[homes]        comment = Home Directories        browseable = yes        path = /smbshare        public = yes        writable = yes

启动samba服务:service smb start; service nmb start
4. 测试WatchDir对SMB目录的支持
修改刚才的Debug Configuration为smb路径,“\211.71.76.25\homes”,在Linux文件夹中创建并删除文件进行测试,发现NIO WatchDir默认已经支持了samba接口的文件监控。
这里写图片描述


参考

https://docs.oracle.com/javase/8/docs/technotes/guides/io/
http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html

0 0