1

我试图让一段代码工作。目的是检查某个目录中是否有 .XML 文件。

这就是我到目前为止所得到的。

File f = new File("saves/*.xml");

    if(f.exists()) {
        /* Do Something */
    } else {
        /* do something else */
    }

我正在尝试使用通配符搜索任何以 .XML 结尾的文件,我在这里遗漏了一些简单的东西吗?是否有更简单的方法来检查指定目录中是否存在至少一个 .XML 文件?

提前致谢。

4

6 回答 6

9

你可以使用这个:

    File dir = new File("saves");
    if (dir.isDirectory()) {
        File[] xmlFiles = dir.listFiles(new FilenameFilter() {

            @Override
            public boolean accept(File folder, String name) {
                return name.toLowerCase().endsWith(".xml");
            }
        });
    }

现在你所有的 xml 文件都在File[] xmlFiles.

于 2013-04-22T09:27:22.473 回答
3

备选方案 1:

您可以使用PathMatcher使用特定模式搜索文件。

备选方案 2:

您也可以使用listFiles(FilenameFilter 过滤器)

于 2013-04-22T09:24:36.697 回答
1

您需要使用 PathMatcher,例如:

PathMatcher matcher =
    FileSystems.getDefault().getPathMatcher("glob:*.{xml}");

Path filename = ...;
if (matcher.matches(filename)) {
    System.out.println(filename);
}

这里的 Oracle 文档。如果你想知道 Glob 是什么:这里解释了它。

于 2013-04-22T09:27:56.527 回答
1

将过滤器部分与搜索路径分开,用文件名过滤器列出搜索路径中的文件,只过滤xml文件。如果列表 sizee 大于 0,则您知道搜索路径包含至少一个 xml 文件。请参阅下面的示例代码:

File f = new File("C:\\");
if (f.isDirectory()){
   FilenameFilter filter =  new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                if(name.endsWith(".xml")){
                    return true;
                }
                return false;
            }
        };
   if (f.list(filter).length > 0){
      /* Do Something */
   }
}
于 2013-04-22T09:41:07.813 回答
0

您可以尝试使用此代码作为参考...

import java.io.*;

public class FindCertainExtension {

private static final String FILE_DIR = "FOLDER_PATH";
private static final String FILE_TEXT_EXT = ".xml";

public static void main(String args[]) {
    new FindCertainExtension().listFile(FILE_DIR, FILE_TEXT_EXT);
}

public void listFile(String folder, String ext) {

    GenericExtFilter filter = new GenericExtFilter(ext);

    File dir = new File(folder);

    if(dir.isDirectory()==false){
        System.out.println("Directory does not exists : " + FILE_DIR);
        return;
    }

    // list out all the file name and filter by the extension
    String[] list = dir.list(filter);

    if (list.length == 0) {
        System.out.println("no files end with : " + ext);
        return;
    }

    for (String file : list) {
        String temp = new StringBuffer(FILE_DIR).append(File.separator)
                .append(file).toString();
        System.out.println("file : " + temp);
    }
}

// inner class, generic extension filter
public class GenericExtFilter implements FilenameFilter {

    private String ext;

    public GenericExtFilter(String ext) {
        this.ext = ext;
    }

    public boolean accept(File dir, String name) {
        return (name.endsWith(ext));
    }
}
}

希望能帮助到你..

于 2013-04-22T09:29:19.797 回答
0

我能想到的最简单的代码:

File dir = new File(xmlFilesDirectory);
File[] files = dir.listFiles((d, name) -> name.endsWith(".xml"));

然后你可以检查是否有这样的xml文件:

if(files.length == 0) {
    /* Do Something */
} else {
    /* do something else */
}
于 2019-10-24T00:31:41.680 回答