获得某个文件夹下的符合正则表达式的文件地址
2015-11-10 10:10
537 查看
根据用户需求列出某个文件夹下所有满足的文件地址
思路:
1.获得用户需要查找的文件夹和对文件名称的需求(正则表达式)
使用Scanner对象
2.列出该文件夹下的所有文件对象
引文文件夹下可能还有文件夹,所有需要 递归函数查找文件
文件数目是不确定的,所以需要使用List保存对象
3.根据正则表达式选择用户需求的文件
根据文件对象的getName()方法获得文件名称和路径。使用String对象的matches(String regex)判断文件名称是否满足要求
4.输出满足要求的路径
使用File对象的getCanonicalPath()获得满足要求对象的绝对路径。
思路:
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); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- msql 正则表达式
- 正则表达式
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序