user1985295
user1985295

Reputation: 13

Filtering files in a directory in Java

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



    }
}

}

}

I am trying to filter out only .mp3's in my program. I'm obviously a beginner and tried copying some things off of Google and this website. How can I set a directory (sourceDir) and move those filtered files to it's own folder?

Upvotes: 0

Views: 5505

Answers (3)

Jasty
Jasty

Reputation: 81

I find the NIO.2 approach using GLOBs or custom filter the cleanest solution. Check out this example on how to use GLOB or filter example in the attached link:

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

For more information about content listing and directory filtering visit Listing and filtering directory contents in NIO.2

Upvotes: 2

MadProgrammer
MadProgrammer

Reputation: 347184

File provides an ability to filter the file list as it's begin generated.

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

Now, this has a number of benefits, the chief among which is you don't need to post-process the list, again, or have two lists in memory at the same time.

It also provides pluggable capabilities. You could create a MP3FileFilter class for instance and re-use it.

Upvotes: 1

Caffe Latte
Caffe Latte

Reputation: 1743

if(ext.endWith(".mp3")){
 //do what ever you want 
}

Upvotes: 0

Related Questions