以java中的特定字母开头的文件列表

时间:2011-04-15 20:23:45

标签: java file serialization

我在相关目录(运行该应用程序的目录)中有一些文件以'@'开头,我需要在java中打开所有这些文件。告诉我一个完成它的方法。如果它有帮助,我正在研究netbeans。它们基本上是.ser文件。所以我必须获取它们中的对象

5 个答案:

答案 0 :(得分:19)

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

在重新审视之后,事实证明你还可以做其他事情。注意我使用的文件过滤器。

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

这是我使用的RegexFileFilter

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

}

这是结果。注意三个好文件和三个坏文件。如果你必须更经常地这样做,我建议使用它,特别是如果你需要根据文件名以外的其他文件属性来做,比如长度,修改日期等。

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

答案 1 :(得分:3)

如果有助于检查java.io.FileFilter

答案 2 :(得分:1)

是的,打开目录文件,使用FileFilter获取其子文件列表,该文件只允许通过您想要的文件名。

答案 3 :(得分:1)

你可以使用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");
        }
    }
 } 

答案 4 :(得分:0)

请看 here,我认为这就是你所需要的。请参阅FileFilter的帖子