List of files starting with a particular letter in java
Asked Answered
F

7

7

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

Farias answered 15/4, 2011 at 20:23 Comment(2)
What does "open all of them in java" mean? Do you want to open them by launching their associated applications, or do you want to read the bytes from these files?Belia
THey're basically .ser files. So I have to fetch the objects in them.Farias
K
21
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 [email protected]
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
Kaela answered 15/4, 2011 at 20:26 Comment(0)
T
4

If it helps check java.io.FileFilter .

Terraterrace answered 15/4, 2011 at 20:27 Comment(0)
A
2

You could use java.nio.file.DirectoryStream;

import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

  //Java version 7 
  class A { 
    public static void main(String[] args) throws Exception
    { 
       // Example directory on dos system
       Path dir = Paths.get("c:\\a\\b\\");

        /**
        *
        * Create a new DirectoryStream for the above path. 
        * 
        * List all files within this directory that begin
        * with the letters A or B i.e "[AB)]*"
        * 
        */
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "[AB]*"))
        {
            // Print all the files to output stream
            for(Path p: stream)
            {  
                System.out.println(p.getFileName());
            }
        }
        catch(Exception e)
        {
            System.out.println("problems locating directory");
        }
    }
 } 
Amenra answered 16/3, 2017 at 12:15 Comment(0)
E
1

Yes, open a directory File, get its List of child Files using a FileFilter that only allows through those file names that you want.

Electrosurgery answered 15/4, 2011 at 20:27 Comment(0)
P
1

One-liner returning the list of File objects:

myDir.listFiles((FilenameFilter)((d, n) -> n.startsWith('myPrefix')))
Proverb answered 24/12, 2022 at 14:45 Comment(0)
T
0

please see here, I think that is what you need. See the post referring to FileFilter

Taurus answered 15/4, 2011 at 20:28 Comment(0)
C
0

You could use Apache AndFileFilter (docx files starting with @) :

Collection<File> files = FileUtils.listFiles(new File(outputPath), new AndFileFilter(new PrefixFileFilter("@"), new SuffixFileFilter(".docx"), TrueFileFilter.TRUE));
for(File file : files) { 
    System.out.println(file.getAbsolutePath());
}
Cramp answered 14/8, 2023 at 7:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.