- package com.DoFileWork;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.FilenameFilter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import com.File.FilterByName;
- public class work_ioAndFile {
-
- /*
- *
- * 获取指定目录下,指定扩展名的文件(包含子目录中的)
- * 这些文件的绝对路径写入到一个文本文件中。
- *
- * 简单说,就是建立一个指定扩展名的文件的列表。
- *
- * 思路:
- * 1,必须进行深度遍历。
- * 2,要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中。
- * 3,对容器中的内容进行遍历并将绝对路径写入到文件中。
- *
- *
- */
- public static void main(String[] args) {
- File file=new File("E:\\使用Java实现面向对象编程");
- //匿名内部类,创建对象+重写一次欧
-
- List<File> fileList=new ArrayList<File>();
- FilterByName filterByName=new FilterByName(".java");
- getListFiles(file, filterByName, fileList);
- System.out.println(fileList.size());
- File f=new File(file, "java.txt");
- writeToFile(fileList, f);
-
- }
- /*
- * 深度遍历文件夹,将其中所有包含.java文件的的文件对象放入指定的容器List<File>中
- */
- private static void getListFiles(File dir,FilenameFilter filter ,List<File> fileList){
- File [] files=dir.listFiles();
- for(File fi:files){
- if(fi.isDirectory()){
- getListFiles(fi, filter, fileList);
- }
- else{
- //对遍历到的文件进行过滤器的过滤。将符合条件File对象,存储到List集合中。
- if(filter.accept(dir, dir.getName())){
- fileList.add(fi);
- }
- }
- }
- }
- private static void writeToFile(List<File> fileList,File destFile){
- BufferedWriter bfw=null;
- try {
- bfw=new BufferedWriter(new FileWriter(destFile));
- for(File fi:fileList){
- System.out.println(fi.getAbsolutePath());
- bfw.write(fi.getAbsolutePath());
- bfw.newLine();
- bfw.flush();
- }
- } catch (IOException e) {
-
- throw new RuntimeException("写入失败");
- }
- finally{
- if(bfw!=null){
- try {
- bfw.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭流失败");
- }
- }
- }
- }
- }
复制代码 过滤器不起作用,没有过滤到.java的文件,应该是getListFiles()这个方法出了问题,但是我就是不知道哪里错了,也许当局者迷嘛,复制到eclipse帮我看看。 |
|