2012-10-15 95 views
1

我想實例化一個File變量,但只知道文件名的一部分。即我知道文件名以「pass_231_」開頭,但不知道其餘部分。這甚至有可能嗎?如何訪問僅包含部分文件名的文件?

+0

使用的文件.listfiles,並比較所有文件名是否以'pass_231_'開頭,並標識要使用的文件。 – Amareswar

+0

最糟糕的情況是您掃描整個目錄結構,查找具有匹配名稱的文件。所以是的,這是可能的,但它有助於知道它所在的目錄。 – NullUserException

回答

0

您可以列出文件夾中的所有文件,然後在知道完整名稱後打開文件。

查看File.list()方法。

1

嘗試在包含該文件的目錄上使用File.listFiles(filter)方法。更多信息here

0

您必須對文件夾執行過濾器,但是如果過濾器返回多個文件,則必須決定打開哪個文件。

3

如果你知道它在哪個目錄,是的。您可以使用FileFilter

final String prefix = "pass_231_" 
File dir = ... ; 
File[] candidates = dir.listFiles(new FileFilter() { 
    @Override 
    public boolean accept(File pathname) { 
     return pathname.getName().startsWith(prefix); 
    } 
}); 
// candidates will contain all files starting with "pass_231_" 

如果你需要搜索遞歸(包括子文件夾),你可以這樣做:

String prefix = "pass_231_"; 
File dir = ... ; 
List<File> candidates = new ArrayList<File>(); 
searchRecursively(dir, prefix, candidates); 
// candidates will contain all files starting with "pass_231_" 

然後searchRecursively看起來是這樣的:

public static void searchRecursively(File dir, final String prefix, List<File> candidates) { 
    File[] matches = dir.listFiles(new FileFilter() { 
     @Override 
     public boolean accept(File pathname) { 
      return pathname.getName().startsWith(prefix); 
     } 
    }); 
    candidates.addAll(Arrays.asList(matches)); 
    File[] subdirs = dir.listFiles(new FileFilter() { 
     @Override 
     public boolean accept(File pathname) { 
      return pathname.isDirectory(); 
     } 
    }); 
    for (File subdir : subdirs) { 
     searchRecursively(subdir, prefix, candidates); 
    } 
} 
+0

這正是我所需要的。謝謝! –

相關問題