2013-04-22 76 views
1

我想获得一段代码工作。目的是检查某个目录中是否存在.XML文件。任何.XML文件的搜索目录

这是我到目前为止。

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

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

我试图使用通配符搜索在.XML结尾的文件,我在这里缺少简单的东西?有没有更简单的方法来检查至少有一个.XML文件存在于指定的目录中?

在此先感谢。

+0

更好地尝试检查'F'是'NULL'或不...试过? – 2013-04-22 09:24:19

+0

@HirenPandya'f'不会是'null',它被分配给'new File(“saved/*。xml”);'只是上面一行。这并不意味着文件存在,但'f'不会是'null'。 – jlordo 2013-04-22 09:32:21

+0

@jlordo ..让我把它作为一个文件对象。如果提到的目录不包含任何指定的文件。那么'f'应该包含'null' ...我在哪里错了..? – 2013-04-22 09:34:15

回答

8

您可以使用此:

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

1

您需要使用的PathMatcher,是这样的:

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

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

从Oracle文档here。如果你想知道Glob是什么:here这是解释。

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

希望它可以帮助..

1

分离过滤器部分从搜索路径并列出与搜索路径中的文件文件名过滤器,只过滤xml文件。如果列表大小大于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 */ 
    } 
}