您的位置:首页 > 编程语言 > Java开发

获得某个文件夹下的符合正则表达式的文件地址

2015-11-10 10:10 537 查看
根据用户需求列出某个文件夹下所有满足的文件地址

 

 思路:

     1.获得用户需要查找的文件夹和对文件名称的需求(正则表达式)

         使用Scanner对象

     2.列出该文件夹下的所有文件对象

         引文文件夹下可能还有文件夹,所有需要 递归函数查找文件

         文件数目是不确定的,所以需要使用List保存对象

     3.根据正则表达式选择用户需求的文件

         根据文件对象的getName()方法获得文件名称和路径。使用String对象的matches(String regex)判断文件名称是否满足要求

     4.输出满足要求的路径
        使用File对象的getCanonicalPath()获得满足要求对象的绝对路径。

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class FileFound {
public static void main(String[] args) {
//获得用户输入
String[] arr = input();

//通过用输入路径初始化File对象
File file = new File(arr[0]);

//获得用户对文件的选择要求
String regex = arr[1];

//获得文件夹下所有文件的Flie对象
List<File> lf = getFiles(file);
//对list中文件对象进行选择
selectFile(lf, regex);

//显示选择好的文件路径
for(File f : lf){
try {
System.out.println(f.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}

/*
* 获得用户输入
*/
private static String[] input(){
//定义并且初始化要返回的字符串数组
String[] result = new String[2];
//输入文件地址
Scanner scan = new Scanner(System.in);
System.out.println("请输入要查找的目录:");
result[0] = scan.nextLine();

//输入要选择文件类型
System.out.println("请输入要查找文件名称的字符串或正则表达式:");
result[1]= scan.nextLine();

//返回用户输入
return result;
}

//在文件列表中选择满足用户要求的文件的路径
public static void selectFile(List<File> lf, String regex) {
//foreach和Iterator的区别
//获得List的Iterator对象
Iterator<File> iterator = lf.iterator();
//对文件路径进行遍历
while(iterator.hasNext()){
File temp = iterator.next();
String name = temp.getName();
//根据用户要求确定要留下的路径信息
if(!name.matches(regex)){
iterator.remove();
}
}
}

/*
* 创建List对象并且记录所有文件对象
*/
public static List<File> getFiles(File file){
List<File> result = new LinkedList<>();
if(file.isDirectory()){
//如果file是文件夹就调用自动存储路径的方法
getFiles1(file, result);
} else {
//如果是文件就将文件对象存储
result.add(file);
}

return result;

}

//将该文件下文件对象存储在给定的List对象中
private static void getFiles1(File file, List<File> lf){
if(file.isDirectory()){
for(File f : file.listFiles()){
//如果file是文件及就递归调用该方法
getFiles1(f, lf);
}
} else {
//如果是文件就将文件对象存储
lf.add(file);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息