- 浏览: 898857 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (319)
- Thinking / 反思 (27)
- 我读的技术类图书 (3)
- 我读的非技术图书 (3)
- Java & Groovy (55)
- Ruby/Rails (9)
- Python (10)
- C/C++ (14)
- C# & .net (9)
- 互联网相关技术 (6)
- Database (6)
- Unix/Linux (6)
- WindowsDev (21)
- 工具使用 / Tips (62)
- 编程技术杂谈/咨讯 (6)
- 软工 / 敏捷 / 模式 (6)
- 易筋经 / 各种内功 (3)
- 充电 / 他学科知识 (6)
- 外语学习 (16)
- 我和宝宝的甜蜜生活 (24)
- 八卦 (3)
- 健康 (0)
- 无类别 (0)
- mTogether (4)
- 一页纸 (3)
- SAP (7)
- baby (2)
- abap (2)
- temp (1)
- network (1)
- 生活 (1)
最新评论
-
daliang1215:
收藏一下,好东西。 xp 的快捷键用的非常爽,到win7缺没有 ...
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它 -
Alice南京:
感谢
Java GC 监视方法与工具 -
wjason:
今天在excel 2010上面写了一些代码,果然lookup有 ...
Excel 公式: 根据一个单元格的用户输入值, 自动设置另一个单元格的值 -
wjason:
因式分解:http://zh.wikipedia.org/wi ...
教孩子学编程: 数学题1 -
bbls:
不错 找了好久了
VS2010: 在Solution Explorer中,自动关联当前正在编辑的文件
最近我们组的Mr.S同学到别的项目组里面支援C#去了,
我也借了这个机会多了解了解C#. 这篇blog讨论的文件监视问题也是从这一过程中衍生出来的.
01 C#的文件监视
C#里面有这样一个类:FileSystemWatche. 他可以用来监视文件系统的变化.
他是对mfc的一个封装,C++ native Develop可以直接调用底层的API, 估计Everything就是这么做的.
微软这套东西的好处一定是:
跟操作系统集成得好, 文件有变化的时候系统会通知我们的程序.
我们的程序也不用总是去轮询.
msdn里面的资源还是很丰富,有这样一个例子,很好得展示了这个类的用法:
public class Watcher { public static void Main() { Run(); } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public static void Run() { string[] args = System.Environment.GetCommandLineArgs(); // If a directory is not specified, exit program. if(args.Length != 2) { // Display the proper way to call the program. Console.WriteLine("Usage: Watcher.exe (directory)"); return; } // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = args[1]; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.txt"; // Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; // Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while(Console.Read()!='q'); } // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath); } }
02 Java的文件监视
对"java文件监视"这一功能的需求最初源自于这样一个用例:
一些程序会以ftp的方式向服务器传送一些文件,
如果Client不在每次上传完文件之后,主动调用以通知服务器变更,同时Server端还想即使得知ftp上文件的变化情况.
那么就得在Server端实现ftp文件变化监视这一功能.
而这一功能可以通过Apache Commons Virtual File System 来实现.
虽然vsf的可以实现这一需求, 然而他的功能却不局限于此, 相信看他的名字也能看出来.
他的目的是帮助我们透明的方式操作不同的文件系统(通过它提供的抽象来搬到这一点)
也因此, 监视ftp上文件变化情况的代码, 完全也已用来监视windows上的文件变化情况.
他目前所支持的系统详见这里:Supported File Systems
包括压缩文件,网络文件,CIFS文件,内存文件等等,
我的印象中还支持csv,svn之类....但是刚才看了一下,ms官网上没有记载, 可能是我记错了.
不罗嗦了, vfs监视ftp/windows folder的代码可以像下面这样:
import java.io.File; import org.apache.commons.vfs.FileChangeEvent; import org.apache.commons.vfs.FileListener; import org.apache.commons.vfs.FileName; import org.apache.commons.vfs.FileObject; import org.apache.commons.vfs.FileSystemException; import org.apache.commons.vfs.FileSystemManager; import org.apache.commons.vfs.VFS; import org.apache.commons.vfs.impl.DefaultFileMonitor; public class TestMonitor { public static void main(String[] args) throws InterruptedException { FileSystemManager fsManager = null; FileObject listendir = null; try { fsManager = VFS.getManager(); //monitor path: ftp listendir = fsManager.resolveFile("ftp://psv:psv@172.17.95.171/incoming/"); //monitor path: windows folder //listendir = fsManager.resolveFile(new File("C:\\a").getAbsolutePath()); } catch (FileSystemException e) { System.out.println("Error Occured."); e.printStackTrace(); } DefaultFileMonitor fm = new DefaultFileMonitor(new FileListener() { public void fileCreated(FileChangeEvent event) throws Exception { monitor(event); } public void fileDeleted(FileChangeEvent event) throws Exception { monitor(event); } public void fileChanged(FileChangeEvent event) throws Exception { monitor(event); } private void monitor(FileChangeEvent event) { FileObject fileObject = event.getFile(); FileName fileName = fileObject.getName(); if (fileName.getBaseName().endsWith(".txt")) { //reload(); System.out.println("File changed, and the file is: "+fileName); }else{ System.out.println("A File which is not our interested type(*.txt file) changed."); } } }); fm.setRecursive(true); fm.addFile(listendir); fm.start(); Thread.sleep(50000000); } }
03 其他
在调查这个问题的过程中L同学告诉我有这样一个类:FileChangeListener
原来他是apache这个包的: apache commons JCI(java compiler interface)
评论
javaeye要是能有把代码折叠起来的功能就好了....
发表评论
-
使用Java调用Mantis提供的webservice, 获得Mantis数据
2012-06-07 14:58 3200写在前面 如果使用Mantis来管理bug, ... -
Java:取得子网掩码
2010-03-17 11:10 5275这个讨论的起因是最近修改的一个bug, 我们的系统管理了一堆 ... -
用netbeans做GUI:SocketException: Malformed reply from SOCKS server
2010-01-07 16:24 8727最近的项目是由一些不同的软件相互协作组成的(是的,就是说这个系 ... -
Java Class Loader
2009-12-28 19:57 1366Java中有三种ClassLoader 1. Boot ... -
Java线程: New他就Start他 (遇见JDK1.4.2_04以前的一个bug)
2009-04-28 09:13 1680我们的系统有OutOfMemory现象, Liu同学最近又发现 ... -
Java: 获得所有线程
2009-03-27 17:13 2142我想在一个时刻查看java中还存在的所有线程, 于是googl ... -
Java GC 监视方法与工具
2009-03-27 15:46 6888项目需要,将gc的监视方法,和gc log的分析工具整理一下, ... -
HttpComponents
2009-02-11 15:56 2770今天要做这样的一件事 ... -
Java documentation in Windows Help format
2009-01-10 17:16 1812.chm格式的java帮助文档查找起来很方便, 常用的库我自己 ... -
SWT Win32 Extension 介绍
2008-10-13 10:52 2708SWT Win32 Extension 这个项目 ... -
Java编码规范
2008-09-26 13:43 1803养成好的编码规范对项目组的好处不用多说~ 我最近在一个维护的项 ... -
Java CSV API
2008-09-24 10:04 7638项目中有一些功能是CSV相关的。新来的一个同事问是用什么写的。 ... -
JFugue - 给我的一个小小的惊喜
2008-09-20 18:32 1384今天看到了这篇博客: 让 Java 轻松乐动起来,使用 JFu ... -
Java "properties文件"编辑器 - eclipse插件
2008-09-16 12:07 2194HomePage: http://propedit.sourc ... -
使用java修改windows注册表
2008-08-06 15:04 4556项目中用到,整理如下: 方法1:利用java.util.p ... -
Eclipse插件开发中如何获得classpath下面的资源
2008-07-21 19:38 3114在我的脑海里面有好几个话题需要记录一下,而正因为好多,我现在已 ... -
cactus eclipse plugin is now unavailable!
2008-07-09 14:28 1444今天要下载个apache cactus的eclipse plu ... -
http://www.groovyland.net/pptshare/
2008-07-09 13:00 1329http://www.groovyland.net/pptsh ... -
Java开源报表制作
2008-07-04 17:16 3068http://www.open-open.com/19.htm ... -
将SunAS以Windows服务方式启动
2008-07-04 17:13 1605继续搞Windows service。这个主题竟然耗费了俺3篇 ...
相关推荐
在许多编程语言中,如Python、Java或C#,都有库或者内置功能可以用来监视文件系统的变更。例如,Python中的`watchdog`库允许我们监听文件或目录的变化。以下是一个简单的Python示例,展示如何使用`watchdog`库来监控...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折叠、交叉跳转、书签等...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2.多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3.代码语法高亮、代码折迭、交叉跳转、书签等...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折叠、交叉跳转、书签等...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码 代码语法高亮、代码 代码折叠、交叉...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折叠、交叉跳转、书签等...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码 代码语法高亮、代码 代码折叠、交叉...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折叠、交叉...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码语法高亮、代码折迭、交叉跳转、书签等基本...
**解释**:在 Java 或 C# 等面向对象的语言中,集合只能存储引用类型的数据,而不是基本数据类型。例如,在 Java 中,集合只能存储 `Integer` 而不是 `int`。 **示例**:题目中的说法“集合中不能存放基本数据类型...
1、支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的 project 也支持 2、多平台: Windows/Linux/Solaris/HP-UX/IRIX/MAC OS X 3、代码 代码语法高亮、代码 代码折叠、交叉...