【问题标题】:JAVA filtering files within directory目录中的 JAVA 过滤文件
【发布时间】:2013-08-22 16:20:14
【问题描述】:

我有许多 url 文件需要按文件名过滤。我有一个应用程序需要在这些文件名中查找的单词数组列表。我曾尝试使用 contains() 函数,但它一直在询问 CharSequence。我已经尝试将数组列表转换为 CharSequence 列表,但仍然不起作用。

代码如下:

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;


public class Filter {
    public static File folder = new File("C:/Users/blah/blah);
    static String temp = "";


    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Reading files under the folder "+ folder.getAbsolutePath());
        listFilesForFolder(folder);
    }

    public static void listFilesForFolder(final File folder){

        ArrayList<String> aa  = new ArrayList<String>
        (Arrays.asList("one","two","three","four","five","six","seven"));

        CharSequence[] cs = aa.toArray(new CharSequence[aa.size()]);


        for(final File fileEntry : folder.listFiles()){
         if(fileEntry.isDirectory()){
             listFilesForFolder(fileEntry);

         } else {
             if (fileEntry.isFile()){
                 temp = fileEntry.getName();
                 if((temp.substring(temp.lastIndexOf('.') + 1,
                     temp.length()).toLowerCase()).equals("url"))
                 System.out.println("File = " + folder.getAbsolutePath()+ "\\" + fileEntry.getName());

            }
           }
          }
         }

        }

【问题讨论】:

  • folder.listFiles() 存储在一个变量中并对其进行迭代,否则将为每个循环创建一个新的文件列表,这会降低您的应用程序的速度。
  • 你的数组怎么可能是字符序列?您不想将数组中的内容转换为字符序列吗?

标签: java filter filenames


【解决方案1】:

更喜欢使用FileFilter

FileFilter urlFilter = new FileFilter() {

    @Override
    public boolean accept(File file) {
        if (file.isDirectory()) {
            return true; // return directories for recursion
        }
        return file.getName().endsWith(".url"); // return .url files
    }
};

使用Set 代替List 来存储文件名。 Set 会给你更好的查找性能。

Set<String> urlNames  = new HashSet<String>(
                        Arrays.asList("one","two","three","four","five","six","seven"));

for (final File fileEntry : folder.listFiles(urlFilter)) { // listFiles using filter
    if (fileEntry.isDirectory()) {
        listFilesForFolder(fileEntry); // recurse if directory
    } else {
        String fileName = fileEntry.getName();
        // match file names w/o extension
        if (urlNames.contains(fileName.substring(0, fileName.length() - 4))) {
            System.out.println("File = " + fileEntry.getAbsolutePath());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2020-11-01
    • 2011-01-14
    • 1970-01-01
    • 2012-02-25
    • 2013-05-09
    相关资源
    最近更新 更多