java常用类解析五:IO系统File类及文件搜索工具类
2011-10-07 18:50
513 查看
1、先看一个File类的简单的例子
2、看完这个例子,是不是可以写个工具类呢,用于搜索指定路径下的所有文件或者目录,当然也可以输入正则表达式,这样就可以筛选出我们想要的文件(如有时候我们只需要.java文件或者.txt文件)
3、测试
4、结果:
-------- 指定目录中所有文件及子目录-------
aa.data
bb.dat
object
test.txt
test1.txt
test2.txt
test3.txt
test4.txt
test5
--------指定目录中以txt为后缀的文件------
test.txt
test1.txt
test2.txt
test3.txt
test4.txt
--------以该目录为根目录的所有文件及子目录--
.classpath
.project
.settings
org.eclipse.jdt.core.prefs
bin
http
PassWord.class
Test.class
mine
util
SearchFile.class
TestSearchFile.class
test
A.class
ArraysDemo.class
B.class
ByteArrayInputStreamDemo.class
DataInputStreamAndByteArrayInputStreamDemo.class
DataInputStreamDemo.class
DeepCloneDemo.class
FileDemo$1.class
FileDemo.class
FileInputStreamDemo.class
package test; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.Scanner; import java.util.regex.Pattern; /** * File代表文件和目录,静态域有:与系统有关的路径分隔符、与系统有关的默认名称分隔符。 * 主要操作有:创建文件或目录、删除文件、给文件设定属性、返回指定目录下的文件列表、 * 返回过滤后的文件列表、 检测文件是否存在、是否隐藏、是否是目录还是文件、 * 返回文件名称和路径 * * @author Touch * */ public class FileDemo { /* * 查找指定路径下的匹配regex的文件 */ public String[] find(String path, final String regex) { File file = new File(path); //匿名内部类 return file.list(new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return pattern.matcher(name).matches(); } }); } public static void main(String[] args) { String path = null; String key = null; String regex = null; int choice = 1; Scanner scanner = new Scanner(System.in); System.out.println("please input the file path:"); path = scanner.next(); System.out.println("please input key:"); key = scanner.next(); System.out.println("choise:\n0:匹配以" + key + "为后缀的文件\n1:匹配包含" + key + "的文件"); if ((choice = scanner.nextInt()) == 0) regex = ".*\\." + key; else regex = ".*" + key + ".*"; String[] list; list = new FileDemo().find(path, regex); System.out.println(Arrays.deepToString(list)); //返回指定路径下的目录列表 File[] fileList = new File(path).listFiles(); for (File file : fileList) { if (file.isDirectory()) { list = new FileDemo().find(file.getPath(), regex); System.out.println(Arrays.deepToString(list)); } } } }
2、看完这个例子,是不是可以写个工具类呢,用于搜索指定路径下的所有文件或者目录,当然也可以输入正则表达式,这样就可以筛选出我们想要的文件(如有时候我们只需要.java文件或者.txt文件)
package mine.util; import java.io.File; import java.util.ArrayList; import java.util.List; /** * FileDirectory类用于查找指定根目录下的所有文件和目录 可以通过正则表达式对要查找的 文件及目录进行筛选 * * @author Touch */ public final class SearchFile { // 存放文件 private List<File> fileList = new ArrayList<File>(); // 存放目录 private List<File> directoryList = new ArrayList<File>(); // 存放文件和目录 private List<File> list = new ArrayList<File>(); private File file;// 目录 private String regex;// 正则表达式 public SearchFile(String path) { file = new File(path); this.regex = ".*"; } public SearchFile(File file) { this.file = file; this.regex = ".*"; } public SearchFile(String path, String regex) { file = new File(path); this.regex = regex; } public SearchFile(File file, String regex) { this.file = file; this.regex = regex; } // 返回当前目录下的所有文件及子目录 public List<File> files() { File[] files = file.listFiles(); List<File> list = new ArrayList<File>(); for (File f : files) if (f.getName().matches(regex)) list.add(f); return list; } // 返回该根目录下的所有文件 public List<File> allFiles() { if (list.isEmpty()) search(file); return fileList; } // 返回该根目录下的所有子目录 public List<File> allDirectory() { if (list.isEmpty()) search(file); return directoryList; } // 返回该根目录下的所有文件及子目录 public List<File> allFilesAndDirectory() { if (list.isEmpty()) search(file); return list; } // 递归搜索当前目录下的所有文件及目录 private void search(File file) { File[] files = file.listFiles(); if (files == null || files.length == 0) return; for (File f : files) { if (f.getName().matches(regex)) list.add(f); if (f.isFile() && f.getName().matches(regex)) fileList.add(f); else { if (f.getName().matches(regex)) directoryList.add(f); search(f); } } } }
3、测试
package mine.util; import java.io.File; import java.util.List; public class TestSearchFile { public static void main(String[] args) { System.out.println("-------- 指定目录中所有文件及子目录-------"); List<File> list = (List<File>) new SearchFile( "G:/java/workspace/test/file").files(); for (File file : list) System.out.println(file.getName()); System.out.println("--------指定目录中以txt为后缀的文件------"); list = (List<File>) new SearchFile("G:/java/workspace/test/file", ".*\\.txt").files(); for (File file : list) System.out.println(file.getName()); System.out.println("--------以该目录为根目录的所有文件及子目录--"); list = (List<File>) new SearchFile("G:/java/workspace/test") .allFilesAndDirectory(); for (File file : list) System.out.println(file.getName()); } }
4、结果:
-------- 指定目录中所有文件及子目录-------
aa.data
bb.dat
object
test.txt
test1.txt
test2.txt
test3.txt
test4.txt
test5
--------指定目录中以txt为后缀的文件------
test.txt
test1.txt
test2.txt
test3.txt
test4.txt
--------以该目录为根目录的所有文件及子目录--
.classpath
.project
.settings
org.eclipse.jdt.core.prefs
bin
http
PassWord.class
Test.class
mine
util
SearchFile.class
TestSearchFile.class
test
A.class
ArraysDemo.class
B.class
ByteArrayInputStreamDemo.class
DataInputStreamAndByteArrayInputStreamDemo.class
DataInputStreamDemo.class
DeepCloneDemo.class
FileDemo$1.class
FileDemo.class
FileInputStreamDemo.class
相关文章推荐
- java常用类解析五:IO系统File类及文件搜索工具类
- java常用类解析五:IO系统File类及文件搜索工具类
- java常用类解析六:IO系统文件读写工具类
- java常用类解析六:IO系统文件读写工具类
- java常用类解析六:IO系统文件读写工具类
- java常用类解析二:IO系统输入输出类
- java常用类解析三:IO系统装饰类
- java常用类解析三:IO系统装饰类
- java常用类解析二:IO系统输入输出类
- java常用类解析二:IO系统输入输出类
- java常用类解析三:IO系统装饰类
- Java IO 流第三方工具类 与 多线程(一) 解析
- java常用类——java web接受文件表单时常用文件解析方法
- Java File类文件管理及IO读写、复制操作
- 服务器异常java.io.IOException: Too many open files(系统最大文件打开数限制)
- java工具类mht转html格式文件 及简单的HTML解析
- JavaIO系统解析
- java 解析properties文件 工具类 通用
- Java IO系统——File类
- java IO-搜索目录所有子文件、复制文件到指定地方