在Java中过滤目录中的文件 公共类分拣机{ 字符串dir1=(“C:/Users/draw/Desktop/test”); 字符串dir2=(“C:/Users/draw/Desktop/”; public void SortingAlgo()引发IOException{ //声明要移动的文件 File sourceDir=新文件(dir1); 文件destDir=新文件(dir2); //获取文件,列出它们,只从包中取出mp3,然后进行排序 文件[]listOfFiles=sourceDir.listFiles(); if(sourceDir.isDirectory()){ for(int i=0;i

在Java中过滤目录中的文件 公共类分拣机{ 字符串dir1=(“C:/Users/draw/Desktop/test”); 字符串dir2=(“C:/Users/draw/Desktop/”; public void SortingAlgo()引发IOException{ //声明要移动的文件 File sourceDir=新文件(dir1); 文件destDir=新文件(dir2); //获取文件,列出它们,只从包中取出mp3,然后进行排序 文件[]listOfFiles=sourceDir.listFiles(); if(sourceDir.isDirectory()){ for(int i=0;i,java,file,filter,Java,File,Filter,} 我只想过滤掉。我的程序里有mp3。我显然是个初学者,试着从谷歌和这个网站上复制一些东西。如何设置目录(sourceDir)并将过滤后的文件移动到自己的文件夹中?文件提供了在文件列表开始生成时过滤文件列表的功能 public class Sorter { String dir1 = ("C:/Users/Drew/Desktop/test"); String dir2 = ("C:/Users/Drew/Desktop/"); public void SortingAlgo() throws

}


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

文件提供了在文件列表开始生成时过滤文件列表的功能

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);



    }
}

}
if(ext.endWith(".mp3")){
 //do what ever you want 
}
现在,这有很多好处,其中最主要的是您不需要再次对列表进行后期处理,或者同时在内存中有两个列表


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

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

File[] listOfFiles = sourceDir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.getName().toLowerCase().endsWith(".mp3");
    }
});
Path directoryPath=Path.get(“C:,“Program Files/Java/jdk1.7.0_40/src/Java/nio/file”);
if(Files.isDirectory(directoryPath)){
try(DirectoryStream=Files.newDirectoryStream(directoryPath,*.mp3”)){
用于(路径:流){
System.out.println(路径);
}
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}

有关内容列表和目录筛选的更多信息,请访问

您是否在此处查看了建议的解决方案:[或此处:[?1)对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。2)要更快地获得更好的帮助,请发布(不使用第三方API,如
FileUtils
).3)查找以从其余文件中筛选
.mp3
文件。4)文章标题与问题不匹配。您可以更改其中一个吗?一般来说,
listFiles
是否也返回目录中的所有文件?@JoshM一般来说
listFiles
必须迭代目录中的所有文件目录以任何方式生成列表。
FileFilter
允许该方法丢弃您不想要的
文件
并只返回您想要的文件。这意味着您不需要双重处理列表…这是不好的。假设您只需要处理.mp3文件,您有10^10个存档,其中只有一个以.mp3.使用您的方法,您将在必要的if语句中执行10^10。
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);
    }
}