在java中查看目录和子目录以进行创建,修改和更改
我已经在目录C:/ java / newfolder中更改了一些代码进行检测它运行良好。 我在下面给出了。
import java.nio.file.*; import java.util.List; public class DirectoryWatchExample { public static void testForDirectoryChange(Path myDir){ try { WatchService watcher = myDir.getFileSystem().newWatchService(); myDir.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); WatchKey watckKey = watcher.take(); List<WatchEvent> events = watckKey.pollEvents(); for (WatchEvent event : events) { if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) { System.out.println("Created: " + event.context().toString()); } if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) { System.out.println("Delete: " + event.context().toString()); } if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) { System.out.println("Modify: " + event.context().toString()); } } } catch (Exception e) { System.out.println("Error: " + e.toString()); } } public static void main (String[] args) { Path myDir = Paths.get("c:/java/newfolder/"); //define a folder root testForDirectoryChange(myDir); } }
现在我只看目录。 但我只需要观看所有子目录。
例如: c:/java/newfolder/folder1, c:/java/newfolder/folder2, c:/java/newfolder/folder3......etc
我给出了子目录上面的例子
C:/ JAVA / newfolder / * ..
我需要观看所有子目录给我一些解决方案吗?
我不熟悉Path
API,所以请注意以下几点。
您正在注册一个用于监视的目录,并且只要修改/创建/删除其中一个直接后代,就会收到通知。
您需要做的第一件事就是注册所有子目录以供观察:
// Used to filter out non-directory files. // This might need to filter '.' and '..' out, not sure whether they're returned. public class DirectoryFilter implements FileFilter { public boolean accept(File file) { return file.isDirectory(); } } // Add this at the end of your testForDirectoryChange method for(File dir: myDir.toFile().listFiles(new DirectoryFilter())) { testForDirectoryChange(dir.toPath()); }
这将递归浏览您的文件结构并注册每个目录以供观看。 请注意,如果目录树太深,则递归可能不是可接受的解决方案,您可能需要“iterify”它。
您需要做的第二件事是,每当您收到目录创建事件时,不要忘记注册新目录以进行监视。
无论如何我就是这样做的,但是手头没有有效的Java 1.7安装,我无法测试它。 如果有效,请告诉我!
您要做的是递归注册WatchService
并继续在后续的ENTRY_CREATE
事件中注册它。 Oracle提供了一个完整的示例: http : //docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java
通常我不会发布一个单一链接的post,但是我怀疑甲骨文将会删除一个相当基础的教程,答案太冗长了。 以防万一,通过搜索“java watchservice recursive”可以轻松找到示例。
这是我带来的……
final WatchService watcher = FileSystems.getDefault().newWatchService(); final SimpleFileVisitor fileVisitor = new SimpleFileVisitor (){ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); return FileVisitResult.CONTINUE; } }; Files.walkFileTree(Paths.get("/directory/to/monitor"), fileVisitor);
那么你想要的是列出目录中的文件/子目录? 您可以使用:
File dir = new File("c:/java/newfolder/"); File[] files = dir.listFiles();
listFiles()为您提供目录中的Files或null,它不是目录。
然后你可以这样做:
for (File file: files){ if (file.listFiles != null){ //It's a subdirectory File [] subdirFiles = file.listfiles; } }
- java-pretty print sql查询
- 如何将“2017-04-26T20:55:00.000Z”字符串转换为java android studio中的日期
- 如何以编程方式在锁定屏幕上设置快捷方式
- 运行Android项目时“找不到com_facebook_android.apk错误”
- 检测设备是否正在关闭?
- 如何在android中修复ArithmeticException错误
- 如何将MediaMetadataRetriever SetDataSource用于外部存储中的文件
- 将servlet架构转换为app-engine端点架构
- 使用Eclipse在Android虚拟机中启动Android java项目时出现问题