IO获取指定目录及其目录下子目录

时间:2022-05-29 04:39:28

  一、需求:获取指定目录下,指定扩展名的文件(包含子目录中的)

  二、需要用到的方法

    1、FilenameFilter返回抽象路径名的定义中表示此抽象路径名的目录中的文件的数组。

       filter.accept : 对遍历到的文件进行过滤器的过滤,将符合对象的File文件   

 

package keyboad;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
* 需求:
* 获取指定目录下,指定扩展名的文件(包含子目录中的)
* 这些文件的绝对路径写入到一个文本文件中
*
* means:建立一个指定的扩展名的文件列表
*思路:
* 1、深度遍历
* 2、需要在遍历过程总进行过滤,将符合条件的内容储存到容器中
* 3、对容器中的内容进行遍历并将绝对路径写入到文件中
*
* Created by lcj on 2017/11/10.
*/
public class practiseDemo {
public static void main(String[] args) {
//指定一个文件目录
File dir = new File("D:\\Repository");
//过滤器,过滤后缀名为.jar
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jar");
}
};
List<File> list = new ArrayList<File>();
//执行getFiles方法,执行完将数据储存至list中
getFiles(dir , filter , list);
//将过滤完的文件保存至java.txt文件中
File destFile = new File(dir,"java.txt");
//执行wrinte2File方法
wrinte2File(list,destFile);
}

/**
*对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤
* 将过滤器后的内容存储到指定容器List中
* @param dir
* @param filter
* @param list
*/
//文件路径,FilenameFilter 过滤器文件名,将过滤掉的数据存储数组
public static void getFiles(File dir,FilenameFilter filter,List<File> list ) {
//listFiles 方法:返回抽象路径名的定义中表示此抽象路径名的目录中的文件的数组。
File[] files = dir.listFiles();
for (File file : files)///file 变量
{
if (file.isDirectory())
{
//如果File是目录,将进行递归
getFiles(file,filter,list);
}else {
//对遍历到的文件进行过滤器的过滤,将符合对象的File文件,存储至List集合中
if (filter.accept(dir,file.getName()))
{
list.add(file);
}
}
}
}
//什么文件写入到 写到那个文件(目的文件)
public static void wrinte2File(List<File> list,File destFile) //List<File> 字符流
{

BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(destFile));
for (File file :list)
{
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}catch (Exception e)
{
throw new RuntimeException("关闭失败");
}
finally {
if (bufw !=null)
{
try {
bufw.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭失败");
}
}
}
}
}