【问题标题】:Search directory for any .XML file搜索任何 .XML 文件的目录
【发布时间】:2013-04-15 03:23:47
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 最好尝试检查f 是否为NULL...尝试过??
  • @HirenPandya f 不会是 null,它被分配给 new File("saves/*.xml"); 仅上面一行。这并不意味着文件存在,但f 不会是null
  • @jlordo.. 让我把它当作一个文件对象。如果提到的目录不包含任何指定的文件。那么f 应该包含null...我在某处错了...?
  • @HirenPandya 是的,你错了。 f 引用 File 对象,而不是 null。由存储在该对象中的抽象路径名表示的文件是否存在是另一个问题。只需运行以下代码:File f = new File("DOESNOTEXIST"); if (f != null) {System.out.println("f is not null");}

标签: java xml java-io


【解决方案1】:

你可以用这个:

    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 中。

【讨论】:

    【解决方案2】:

    备选方案 1:

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

    备选方案 2:

    你也可以使用listFiles(FilenameFilter filter)

    【讨论】:

      【解决方案3】:

      您需要使用 PathMatcher,例如:

      PathMatcher matcher =
          FileSystems.getDefault().getPathMatcher("glob:*.{xml}");
      
      Path filename = ...;
      if (matcher.matches(filename)) {
          System.out.println(filename);
      }
      

      来自 Oracle 文档 here。如果您想知道 Glob 是什么:here 它已得到解释。

      【讨论】:

        【解决方案4】:

        将过滤器部分与搜索路径分开,用文件名过滤器列出搜索路径中的文件,只过滤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 */
           }
        }
        

        【讨论】:

          【解决方案5】:

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

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

          希望对你有帮助..

          【讨论】:

            【解决方案6】:

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

            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 */
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-18
              • 1970-01-01
              相关资源
              最近更新 更多