18.1.2 目录实用工具
来源:互联网 发布:广联达软件管家打不开 编辑:程序博客网 时间:2024/05/29 18:42
下边展示了一个根据给定目录和正则匹配出其下所有匹配到的子文件的示例
package com.cnsuning.file;import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;import java.util.regex.Pattern;public class Directory {public static File[] local(File file, final String regex) {return file.listFiles(new FilenameFilter() {Pattern filePattern = Pattern.compile(regex);public boolean accept(File arg0, String arg1) {return filePattern.matcher(arg1).matches();}});}public static File[] local(String path, final String regex) {return local(new File(path), regex);}public static class TreeInfo implements Iterable<File> {public List<File> files = new ArrayList<File>();public List<File> dirs = new ArrayList<File>();public Iterator<File> iterator() {return files.iterator();}public void addAll(TreeInfo other) {files.addAll(other.files);dirs.addAll(other.dirs);}public String toString() {String fileStr = Arrays.asList(this.files).toString();String dirStr = Arrays.asList(this.dirs).toString();return "files :" + fileStr + "\n dirs :" + dirStr;}}public static TreeInfo recursDirs(File file, String regex) {TreeInfo treeInfo = new TreeInfo();File[] fileList = file.listFiles();for (File thisFile : fileList) {if (thisFile.isDirectory()) {treeInfo.dirs.add(thisFile);treeInfo.addAll(recursDirs(thisFile, regex));} else {if(thisFile.getName().matches(regex)){treeInfo.files.add(thisFile);}}}return treeInfo;}public static TreeInfo walk(File file, String regex) {return recursDirs(file, regex);}public static TreeInfo walk(String path, String regex) {return walk(new File(path), regex);}public static void main(String[] args) {// File[] fileList = local("D:\\download", "[\\w|.]*");// System.out.println(fileList.length);// System.out.println(Arrays.asList(fileList));System.out.println(recursDirs(new File("D:\\download"), "[\\w|.]*"));}}
下边这个示例利用了上边的工具类, 对匹配到的文件进行处理
package com.cnsuning.file;import java.io.File;public class ProcessFile {// 提供接口化的process方法, 可供调用者定制遍历处理程序public interface Strategy {public void process(File file);}private Strategy strategy;private String ext;public ProcessFile(Strategy strategy, String ext) {this.strategy = strategy;this.ext = ext;}public void processDirectoryTree(File root) {if(!root.exists()){//文件不存在return;}if(root.isDirectory()){//目录的, 利用directory获取全部文件列表后processfor (File file : Directory.walk(root, ".*\\." + this.ext)) {this.strategy.process(file);}}else{//文件, 直接processString fileName = root.getName();if(fileName.endsWith("."+this.ext)){this.strategy.process(root);}}return;}public void start(String[] args) {if (0 == args.length) {// 空命令行参数的, 遍历当前目录this.processDirectoryTree(new File("."));}else{for(String arg: args){this.processDirectoryTree(new File(arg));}}}public static void main(String[] args) {// TODO Auto-generated method stubProcessFile pf = new ProcessFile(new ProcessFile.Strategy() {@Overridepublic void process(File file) {// TODO Auto-generated method stubSystem.out.println(file.getAbsolutePath());}},"jpg");pf.start(args);}}
遍历程序利用了内部接口的设计, 这样可以更清楚的看到其上下文关系.
0 0
- 18.1.2 目录实用工具
- 2款windows实用工具
- 实用工具
- ~~~实用工具~~~
- 实用工具
- 实用工具
- 实用工具
- 实用工具
- 实用工具
- 实用工具
- 实用工具
- 实用工具
- android 实用工具 2 调试工具
- Thinking In Java学习笔记之目录实用工具
- 产品经理实用工具2-报表演示SwiffChart
- Boost源码学习三[实用工具](2)
- Java基础--并发实用工具(2)
- Windows NT | 2K |XP | 2K3实用工具集
- chrome插件的制作和使用心得
- (2014.08.10-2014.08.12)三天的学习小记
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
- hihocoder第三周KMP算法(睡了一觉突然一个灵感出现就把这道题解出来了)
- windows命令行工具
- 18.1.2 目录实用工具
- 填报下发
- E/AndroidRuntime(30895): Caused by: java.lang.ClassCastException: android.widget.ImageButton
- 使用 ICMP 和 RAW Sockets实现 ping 类
- [SPFA的SLF优化] Codeforces Round #257 (Div. 1) B
- 千万不要买小胖子u盘
- Intent 用法全面总结
- [Java-码农]win7(windows7)下java环境变量配置方法
- 多线程GCD的使用