- 浏览: 2167765 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
sunzeshan:
找了很久,用了这个插件解决问题啦。谢谢
eclipse jetty debug source not found -
xiaosong0112:
您好,请问为什么要这样设置呢,原理是什么?在网上很多转帖都没有 ...
maven的jetty插件提示No Transaction manager found导致启动慢的解决方法 -
eimhee:
tjzx 写道畅搜谷歌:http://dian168.cc/打 ...
Google 镜像站搜集 -
tjzx:
畅搜谷歌:http://dian168.cc/打开的是“最火源 ...
Google 镜像站搜集 -
eimhee:
finallygo 写道你这属于"头痛医头脚痛医脚& ...
解决linux下too many file问题
最近在用java写监视文件系统的东东 Java下的实现方法做一小结。
Java环境下
很多人都说用文件轮询HashTable,然后如何如何比较,这种方法效率极为低下,还会造成无谓的磁盘读写。好了JDK 7中提供了java.nio.file大家可以通过 WatchService 来实现对文件的事件的监听。千万记得在JDK 7下哈,现在的JDK7的预览版发布到 jdk-7-ea-bin-b84-windows-i586-18_feb_2010.exe了。有兴趣的哥们可以把这个程序拿下去学习学习。
JAVA是借助系统级的事件通知来完成对文件系统的监视的,性能上自然很强了。
Java环境下
很多人都说用文件轮询HashTable,然后如何如何比较,这种方法效率极为低下,还会造成无谓的磁盘读写。好了JDK 7中提供了java.nio.file大家可以通过 WatchService 来实现对文件的事件的监听。千万记得在JDK 7下哈,现在的JDK7的预览版发布到 jdk-7-ea-bin-b84-windows-i586-18_feb_2010.exe了。有兴趣的哥们可以把这个程序拿下去学习学习。
该段代码来自于 Sun(准确的该说是Oracle了) http://java.sun.com/docs/books/tutorial/essential/io/notification.html /* * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Sun Microsystems nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.nio.file.*; import static java.nio.file.StandardWatchEventKind.*; import static java.nio.file.LinkOption.*; import java.nio.file.attribute.*; import java.io.*; import java.util.*; /** * Example to watch a directory (or tree) for changes to files. */ public class WatchDir { private final WatchService watcher; private final Map<WatchKey,Path> keys; private final boolean recursive; private boolean trace = false; @SuppressWarnings("unchecked") static <T> WatchEvent<T> cast(WatchEvent<?> event) { return (WatchEvent<T>)event; } /** * Register the given directory with the WatchService */ private void register(Path dir) throws IOException { WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); if (trace) { FileRef prev = keys.get(key); if (prev == null) { System.out.format("register: %s\n", dir); } else { if (!dir.equals(prev)) { System.out.format("update: %s -> %s\n", prev, dir); } } } keys.put(key, dir); } /** * Register the given directory, and all its sub-directories, with the * WatchService. */ private void registerAll(final Path start) throws IOException { // register directory and sub-directories Files.walkFileTree(start, new SimpleFileVisitor<Path>() { @Override public FileVisitResult preVisitDirectory(Path dir) { try { register(dir); } catch (IOException x) { throw new IOError(x); } return FileVisitResult.CONTINUE; } }); } /** * Creates a WatchService and registers the given directory */ WatchDir(Path dir, boolean recursive) throws IOException { this.watcher = FileSystems.getDefault().newWatchService(); this.keys = new HashMap<WatchKey,Path>(); this.recursive = recursive; if (recursive) { System.out.format("Scanning %s ...\n", dir); registerAll(dir); System.out.println("Done."); } else { register(dir); } // enable trace after initial registration this.trace = true; } /** * Process all events for keys queued to the watcher */ void processEvents() { for (;;) { // wait for key to be signalled WatchKey key; try { key = watcher.take(); } catch (InterruptedException x) { return; } Path dir = keys.get(key); if (dir == null) { System.err.println("WatchKey not recognized!!"); continue; } for (WatchEvent<?> event: key.pollEvents()) { WatchEvent.Kind kind = event.kind(); // TBD - provide example of how OVERFLOW event is handled if (kind == OVERFLOW) { continue; } // Context for directory entry event is the file name of entry WatchEvent<Path> ev = cast(event); Path name = ev.context(); Path child = dir.resolve(name); // print out event System.out.format("%s: %s\n", event.kind().name(), child); // if directory is created, and watching recursively, then // register it and its sub-directories if (recursive && (kind == ENTRY_CREATE)) { try { if (Attributes.readBasicFileAttributes(child, NOFOLLOW_LINKS).isDirectory()) { registerAll(child); } } catch (IOException x) { // ignore to keep sample readbale } } } // reset key and remove from set if directory no longer accessible boolean valid = key.reset(); if (!valid) { keys.remove(key); // all directories are inaccessible if (keys.isEmpty()) { break; } } } } static void usage() { System.err.println("usage: java WatchDir [-r] dir"); System.exit(-1); } public static void main(String[] args) throws IOException { // parse arguments if (args.length == 0 || args.length > 2) usage(); boolean recursive = false; int dirArg = 0; if (args[0].equals("-r")) { if (args.length < 2) usage(); recursive = true; dirArg++; } // register directory and process its events Path dir = Paths.get(args[dirArg]); new WatchDir(dir, recursive).processEvents(); } }
JAVA是借助系统级的事件通知来完成对文件系统的监视的,性能上自然很强了。
发表评论
-
MySQLNonTransientConnectionException: No operations allowed
2015-05-19 16:47 2329最近在调试会发现“ No operations allow ... -
mysql 执行计划优化
2013-04-07 17:46 1543一条简单的SQL 语句竟花了15.87 sec, ... -
ThreadLocal 引起的内存泄露
2012-10-18 17:48 2416最近在用LOADRUNNER做性能测试, 运行几个小时后, ... -
lucene 反向索引原理
2012-07-20 12:47 1993lucene是一个高性能的全文搜索工具, 使用反向索引结构。 ... -
tomcat7在UBUNTU上自动启动
2012-06-11 12:55 2764为了让tomcat自动启动当电脑重起时, 你必须添加一个脚本, ... -
hadoop中的Writable分析
2012-06-07 11:27 3369hadoop 要使一个类能序例化, 要实现Writabl ... -
在UBUNTU安装NUTCH(十个简单的步骤)
2012-06-06 17:32 4028下面十个步骤能安装Nutch, 并且能爬行你的网站, 创建你自 ... -
深入Lucene的索引文件
2012-02-01 16:50 6893Lucene的索引里面存了些什么,如何存放的,也即Luc ... -
EasyMock and IllegalStateException
2012-01-31 15:09 1342When writing a portlet and tryi ... -
Java Enum的原理
2011-05-03 09:19 1826Java Enum 类型的语法结构尽管和 java 类的语法不 ... -
用JAXB从对象生成XML
2011-04-26 08:54 2991import java.io.FileOutputStream ... -
jdk6 WebService入门
2011-03-10 23:04 3405一、 Web Services简介 ... -
dom4j处理超大XML
2010-12-26 23:35 4854英文原文 : http://dom4j.sourceforge ... -
httpclient3 自动登陆淘宝, 开心网
2010-11-09 22:09 10013前提:需要用到的java包 commons-httpclien ... -
Lucene实时索引构建
2010-11-06 23:11 7431Lucene可以增量的添加一 ... -
分享Java并发最佳书籍Java Concurrency in Practice Java并发最佳书籍 下载
2010-10-21 08:31 13452好久没有上来更新过了,最近在学习线程池实现,参考了 Tomc ... -
Spring Hibernate3 配置 C3P0
2010-10-15 00:31 7565由于Hibernate3不推荐使用DBCP, 所以把连接池换成 ... -
将依赖包加入到本地maven库
2010-07-22 16:47 2903要将依赖包加入到本地maven库 mvn instal ... -
Maven Dependency设置,详解!
2010-07-21 17:08 2519用了Maven,所需的JAR包 ... -
Inner Join with hibernate and HQL
2010-07-18 12:24 2182String queryStri ...
相关推荐
2 Java项目文件构成 由一个servlet构成,用来存储异常录像的发生时间和录像名称。类文件叫做RecordServlet.java。 运行步骤: 1 设置odbc数据源,利用附件提供的数据库,数据源名称为:record 在FlashMediaServer...
5. **第三方库**:如HProf,它是一个Java内存分析工具,能够生成堆转储文件供后续分析。 在实际开发中,我们不仅要关注内存的分配和使用,还需要关注内存泄漏问题。内存泄漏可能导致程序性能下降,甚至导致系统崩溃...
8. **编程语言支持**:开发文件监视应用可能涉及到C++、C#、Java等编程语言,对于Windows平台,尤其是需要编写驱动程序时,通常会使用C++配合Windows Driver Kit(WDK)。 总的来说,文件监视是一个涉及操作系统...
总的来说,实现"Java自动监视usb设备,复制存储设备中指定格式文件到本地"的功能,需要深入了解Java的USB API、文件I/O操作、并发编程和错误处理等技术。在实际开发中,可以根据具体需求进行优化和定制,例如添加日志...
9. 文件监控:通过`java.nio.file.FileSystem`和`java.nio.file.FileSystems`类,可以注册监听器监视文件系统事件,如文件创建、删除、修改等。 10. ZIP和RAR等压缩格式的支持:Java标准库并不直接支持ZIP或RAR格式...
在Java编程环境中,实现Windows文件系统的操作监控是一个有趣且实用的技术挑战。这涉及到对系统底层事件的捕获,通常需要借助于系统钩子(System Hooks)的概念。在Java中,虽然原生支持并不完善,但我们可以通过...
在IT领域,对本机文件目录进行监视是一项重要的任务,特别是在系统管理、软件开发和数据监控等场景。文件目录监视允许我们实时跟踪目录中的变化,例如文件的创建、删除、移动或修改,这对于自动化流程、日志管理和...
在IT领域,文件拖放和文件监视是两个重要的功能,它们极大地提升了用户在操作系统中的交互体验和工作效率。这里,我们将详细探讨这两个概念及其在实际应用中的实现。 首先,"文件拖放打开"是指用户可以通过鼠标将一...
### Java 实现监视任务的进度条 #### 背景介绍 在开发用户界面或执行长时间运行的任务时,提供一个可视化的进度指示器对于提升用户体验至关重要。进度条是一种常见的控件,用于显示任务的完成情况。Java 提供了...
总结,Java目录监视器项目源程序是Java技术在文件系统监控领域的一个实际应用,它结合了Java NIO的`WatchService`接口,为开发者提供了一种高效、灵活的方式来跟踪和响应文件系统变化。通过学习和应用这个项目,不仅...
以下是一些相关的Java文件操作知识点: 1. **文件I/O流**:Java提供了丰富的I/O流类库,如FileInputStream和FileOutputStream用于读写文件。通过创建这些对象,我们可以对文件进行读取或写入操作。例如,`new ...
标题中的“java屏幕监视的两个小程序.rar”表明这是一个关于Java编程的压缩文件,其中包含了用于屏幕监视的小程序。这些小程序可能被设计用于调试目的,帮助开发者观察和理解应用程序在运行时的行为。 首先,我们来...
Java目录监视器是一种实用工具,它能够实时监控指定目录下的文件和子目录的变化,例如文件的创建、修改、删除等事件。这样的功能在开发、测试和调试过程中非常有用,可以帮助开发者跟踪代码变动或者数据文件的更新。...
【Java窗口应用程序布局与监视器】是Java编程中关于图形用户界面GUI开发的重要知识点。在Java中,我们通常使用AWT或Swing库来创建窗口应用程序。在这个例子中,我们看到一个名为`Window`的类扩展了`Frame`类,并实现...
在文件名称列表中,"pandora-master"可能是指Pandora项目,这是一个开源的Android开发辅助框架。Pandora通常包含一系列模块,如日志管理、网络监控、性能统计等,旨在为开发者提供全方位的开发支持。 Pandora的核心...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
在IT领域,监视指定文件的变化是一项重要的任务,特别是在系统监控、日志分析、软件调试以及自动化脚本编写等场景中。这项技术可以帮助我们实时...无论是开发、运维还是数据分析,了解和掌握这一技术都是非常有价值的。
JDK是Java的基础,它包含了Java运行时环境(JRE)、编译器(javac)、Javadoc工具(用于生成API文档)以及一系列的实用工具,如jar打包工具、jconsole性能监视器等。JDK的版本更新频繁,每次更新都会带来新的特性和...
1. **Java编译器(javac)**:这是JDK中的核心组件之一,它负责将程序员编写的源代码(.java文件)转换成Java字节码(.class文件),这个过程叫做编译。Java字节码是一种平台无关的中间表示,可以在任何安装了JVM的...