第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > apache commons-io相关介绍-DirectoryWalker类

apache commons-io相关介绍-DirectoryWalker类

时间:2020-09-11 15:47:17

相关推荐

apache commons-io相关介绍-DirectoryWalker类

DirectoryWalker类

DirectoryWalker类主要用于处理遍历文件目录操作的类,在遍历文件目录的过程中可以对文件或文件夹做相应处理(添加钩子)。DirectoryWalker类是一个抽象类,使用的需要创建这个类的子类。这个类需要制定一个泛型参数,作为返回结果的类型。

类中的一些主要的函数:

handleStart 遍历处理开始时触发的函数

handleEnd 遍历处理结束时触发的函数

handleDirectory 遍历过程中如果是目录,则触发该函数

handleFile 遍历过程中如果是文件,则触发该函数

handleDirectoryStart 处理目录开始时触发的函数

handleDirectoryEnd 处理目录结束时触发的函数

filterDirectoryContents 自定义过滤目录中的文件

walk 开始遍历文件目录的函数,并返回处理的列表。有个一重载的walk函数,内部的实现方式就使用递归的方法去遍历子目录。

下面是一个简单遍历文件夹下所有文件名的例子:

static class ListFileWorker extends DirectoryWalker<File>{ List<File> list(File startDirectory) throws IOException { ArrayList<File> files = new ArrayList<File>(); walk(startDirectory, files); return files; } @Override protected void handleFile(File file, int depth, Collection<File> results)throws IOException { results.add(file);//文件名直接添加到返回结果列表 } }main函数:

public static void main(String[] args) { ListFileWorker worker = new ListFileWorker(); try { List<File> files = worker.list(new File("C:\Python27")); for (File file : files) { System.out.println(file); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }当然也可以添加FileFilter过滤掉文件夹或目录,这样就不会遍历那些被过滤掉的文件或者目录。

下面一个例子是中官方源代码中自带的测试用例中的代码:

/** * DirectoryWalker implementation that recursively lists all files and directories. */ static class ListDirectoryWalker extends DirectoryWalker<File> { ListDirectoryWalker() { super(); } List<File> list(File startDirectory) throws IOException { ArrayList<File> files = new ArrayList<File>(); walk(startDirectory, files); return files; } @Override protected void handleDirectoryStart(File directory, int depth, Collection<File> results) throws IOException { // Add all directories except the starting directory //遇到目录的时候也把目录加到结果列表中 if (depth > 0) { results.add(directory); } } @Override protected void handleFile(File file, int depth, Collection<File> results) throws IOException { results.add(file); } }下面给出java doc中给出的一些例子:

//FileCleaner.java //遍历目录,删除.svn目录(和其子文件) import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import mons.io.DirectoryWalker; public class FileCleaner extends DirectoryWalker { public FileCleaner() { super(); } public List clean(File startDirectory) throws IOException { List results = new ArrayList(); walk(startDirectory, results); return results; } protected boolean handleDirectory(File directory, int depth, Collection results) { // delete svn directories and then skip if (".svn".equals(directory.getName())) { directory.delete(); return false; } else { return true; } } protected void handleFile(File file, int depth, Collection results) { // delete file and add to list of deleted file.delete(); results.add(file); } }添加FileFilter的推荐方法:

public class FooDirectoryWalker extends DirectoryWalker { //dirFilter目录过滤器,fileFilter文件类型过滤器 public FooDirectoryWalker(IOFileFilter dirFilter, IOFileFilter fileFilter) { super(dirFilter, fileFilter, -1); } } // Use the filters to construct the walker FooDirectoryWalker walker = new FooDirectoryWalker( HiddenFileFilter.VISIBLE, FileFilterUtils.suffixFileFilter(".txt"), );

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。