Search code examples
javafileserialization

List of files starting with a particular letter in java


I've got some files in the relative directory (directory the app is running in) starting with '@' and I need to open all of them in java. Show me a way to accomplish it. If it helps, I'm working on netbeans.They're basically .ser files. So I have to fetch the objects in them


Solution

  • File dir = new File(".");
    if(!dir.isDirectory()) throw new IllegalStateException("wtf mate?");
    for(File file : dir.listFiles()) {
        if(file.getName().startsWith("@"))
            process(file);
    }
    

    After revisiting this, it turns out there's something else you can do. Notice the file filter I used.

    import java.io.File;
    class Test {
        public static void main(String[] args) {
            File dir = new File(".");
            if(!dir.isDirectory()) throw new IllegalStateException("wtf mate?");
            for(File file : dir.listFiles(new RegexFileFilter("@*\\.ser"))) {
                    process(file);
            }
        }
    
        public static void process(File f) {
            System.out.println(f.getAbsolutePath());
        }
    }
    

    Here's the RegexFileFilter I used

    public class RegexFileFilter implements java.io.FileFilter {
    
        final java.util.regex.Pattern pattern;
    
        public RegexFileFilter(String regex) {
            pattern = java.util.regex.Pattern.compile(regex);
        }
    
        public boolean accept(java.io.File f) {
            return pattern.matcher(f.getName()).find();
        }
    
    }
    

    And here's the result. Note the three good files and the three bad files. If you had to do this on a more regular basis, I'd recommend using this, especially if you need to do it based on other attributes of the file other than file name, like length, modify date, etc.

    C:\junk\j>dir
     Volume in drive C has no label.
     Volume Serial Number is 48FA-B715
    
     Directory of C:\junk\j
    
    02/14/2012  06:16 PM    <DIR>          .
    02/14/2012  06:16 PM    <DIR>          ..
    02/14/2012  06:15 PM                 0 @bad.serr
    02/14/2012  06:15 PM                 0 @badser
    02/14/2012  06:15 PM                 0 @first.ser
    02/14/2012  06:15 PM                 0 @second.ser
    02/14/2012  06:15 PM                 0 @third.ser
    02/14/2012  06:15 PM                 0 bad@file.ser
    02/14/2012  06:24 PM               692 RegexFileFilter.class
    02/14/2012  06:24 PM               338 RegexFileFilter.java
    02/14/2012  06:24 PM               901 Test.class
    02/14/2012  06:24 PM               421 Test.java
                  10 File(s)          2,352 bytes
                   2 Dir(s)  10,895,474,688 bytes free
    
    C:\junk\j>java Test
    @first.ser
    @second.ser
    @third.ser