【求教】用java语言实现文件类型筛选
  思路: 1、获得目标目录path;
         2、获得path内所有文件的文件名,存入数组A1中;
         3、遍历数组,并自右判断文件后缀名为.xxx,将符合要求的文件名搬移至新数组A2中;
         4、打印输出 A2数组的结果至控制台。希望各位大侠,多多指点,思路有错误请指正。另如能给出源码和注释,非常感谢。

解决方案 »

  1.   


    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    public class FileList {
    private static List<String> list1 = new ArrayList<String>();
    private static List<String> list2 = new ArrayList<String>();

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入目标路径:");
    String path = input.next();
    File file = new File(path);
    System.out.println("请输入要查找的文件类型(.***):");
    String type = input.next();

    //取得所有文件
    list(file);

    //查找指定类型的文件
    findByType(type);

    //打印目标路径下的特定文件名
    for(String fileName : list2) {
    System.out.println(fileName);
    }
    }

    /**
     * 递归取得目标目录下的所有文件,将文件名存入list1
     * @param file 目标路径或文件
     */
    private static void list(File file) {
    if(file.isDirectory()) {
    File[] files = file.listFiles();
    for(int i=0; i<files.length; i++) {
    list(files[i]);
    }
    } else {
    list1.add(file.getName());
    }
    }

    /**
     * 遍历list1把扩展名为type的文件名存入list2
     * @param type 要查找的文件类型
     */
    private static void findByType(String type) {
    for(String fileName : list1) {
    if(fileName.endsWith(type))
    list2.add(fileName);
    }
    }
    }
      

  2.   

    使用 java.io.FilenameFilter 接口,在 list 的时候就过滤掉。
      

  3.   


    多谢指教,之后学习用 java.io.FilenameFilter 接口,在 list 的时候就过滤的方法。
      

  4.   

    也试着写一个,正则表达式来匹配后缀的,这样大小写都可以匹配了。 public static void main(String[] args) throws Exception  {
    //Scanner sc = new Scanner(System.in);
    //System.out.println("请输入文件路径:");
    //String str = sc.next();
    //System.out.println(str);
    File f = new File("D://SOFT");
    String A1[] = f.list();
    List<String> ls = new ArrayList<String>();
    Pattern p = Pattern.compile(".+\\.rar",Pattern.CASE_INSENSITIVE);
    Matcher m;
    for(int i=0;i<A1.length;i++) {
    m = p.matcher(A1[i]);
    if(m.matches()) {
    ls.add(A1[i]);
    }
    }
    for (Iterator it = ls.iterator();it.hasNext();) {
    System.out.println(it.next());
    }
    }