【问题标题】:Filtering files in a directory in Java在Java中过滤目录中的文件
【发布时间】:2013-08-21 23:16:08
【问题描述】:
public class Sorter {
String dir1 = ("C:/Users/Drew/Desktop/test");
String dir2 = ("C:/Users/Drew/Desktop/");

public void SortingAlgo() throws IOException {

// Declare files for moving
File sourceDir = new File(dir1);
File destDir = new File(dir2);

//Get files, list them, grab only mp3 out of the pack, and sort

File[] listOfFiles = sourceDir.listFiles();

if(sourceDir.isDirectory()) {

for(int i = 0; i < listOfFiles.length; i++) {

    //list Files
    System.out.println(listOfFiles[i]);

    String ext = FilenameUtils.getExtension(dir1);
    System.out.println(ext);



    }
}

}

}

我试图在我的程序中只过滤掉 .mp3。我显然是一个初学者,并试图从谷歌和这个网站上复制一些东西。如何设置目录(sourceDir)并将过滤后的文件移动到自己的文件夹中?

【问题讨论】:

标签: java file filter


【解决方案1】:

File 提供了在文件列表开始生成时对其进行过滤的功能。

File[] listOfFiles = sourceDir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.getName().toLowerCase().endsWith(".mp3");
    }
});

现在,这有很多好处,其中最主要的是您不需要再次对列表进行后处理,或者同时在内存中拥有两个列表。

它还提供可插拔功能。例如,您可以创建一个 MP3FileFilter 类并重新使用它。

【讨论】:

  • 一般来说,listFiles 是否也会返回一个目录中的所有文件?
  • @JoshM 一般来说listFiles 必须以任何方式迭代目录中的所有文件以生成列表。 FileFilter 允许该方法丢弃那些你不想要的Files,只返回你想要的那些。这意味着您不需要双重处理列表...
【解决方案2】:

我发现使用 GLOB 或自定义过滤器的 NIO.2 方法是最干净的解决方案。在附加链接中查看有关如何使用 GLOB 或过滤器示例的示例:

Path directoryPath = Paths.get("C:", "Program Files/Java/jdk1.7.0_40/src/java/nio/file");

if (Files.isDirectory(directoryPath)) {
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, "*.mp3")) {
        for (Path path : stream) {
            System.out.println(path);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

有关内容列表和目录过滤的更多信息,请访问Listing and filtering directory contents in NIO.2

【讨论】:

    【解决方案3】:
    if(ext.endWith(".mp3")){
     //do what ever you want 
    }
    

    【讨论】:

    • 这不好。想象一下,您只需要处理 .mp3 文件,并且您有 10^10 个档案,其中只有一个以 .mp3 结尾。使用您的方法,您将执行 10^10 次 if 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2020-11-01
    • 2011-01-14
    • 1970-01-01
    • 2011-07-05
    • 2013-05-09
    相关资源
    最近更新 更多