2012-10-05 97 views
0

使用通配符我想處理目錄中的文件。如果指定了通配符,我想處理那些匹配通配符字符的文件,如果未指定,我將處理所有文件。這裏是我的代碼使用通配符(java)過濾文件

List<File> fileList; 
    File folder = new File("Directory"); 
    File[] listOfFiles = folder.listFiles(); 
    if(prop.WILD_CARD!=null) { 
     Pattern wildCardPattern = Pattern.compile(".*"+prop.WILD_CARD+"(.*)?.csv",Pattern.CASE_INSENSITIVE); 
     for(File file: listOfFiles) { 
      Matcher match = wildCardPattern.matcher(file.getName()); 
      while(match.find()){ 
       String fileMatch = match.group(); 
       if(file.getName().equals(fileMatch)) { 
        fileList.add(file); // doesn't work 
       } 
      } 
     } 
    } 
    else 
     fileList = new LinkedList<File>(Arrays.asList(folder.listFiles())); 

我無法將匹配通配符字符的文件放在單獨的文件列表中。請幫助我修改我的代碼,以便可以將所有匹配通配符字符的文件放在單獨的文件列表中。這裏我在我的正則表達式中連接prop.WILD_CARD,它可以是任何字符串,例如如果通配符是測試,我的模式是。 測試(。)?。csv。我想存儲與此通配符匹配的文件並將其存儲在文件列表中。

+0

我猜你的模式是不正確的。你必須顯示你期望它匹配的模式和文件名 –

+0

@IngoKegel沒有我的模式是正確的,它的工作原理。如果測試我的模式是。* test(。*)?.csv,prop.WILD_CARD可以是任何東西。我想存儲與此通配符匹配的文件並將其存儲在文件列表中 –

+0

第一件事是您的'fileList'未初始化。第二個是在比較之前將'file.getName()'和'fileMatch'輸出到控制檯。 – svz

回答

1

我剛測試過這段代碼,它運行得很好。你應該檢查其他地方的邏輯錯誤。

public static void main(String[] args) { 

    String WILD_CARD = ""; 
    List<File> fileList = new LinkedList<File>(); 
     File folder = new File("d:\\"); 
     File[] listOfFiles = folder.listFiles(); 
     if(WILD_CARD!=null) { 
      Pattern wildCardPattern = Pattern.compile(".*"+WILD_CARD+"(.*)?.mpp",Pattern.CASE_INSENSITIVE); 
      for(File file: listOfFiles) { 
       Matcher match = wildCardPattern.matcher(file.getName()); 
       while(match.find()){ 
        String fileMatch = match.group(); 
        if(file.getName().equals(fileMatch)) { 
         fileList.add(file); // doesn't work 
        } 
       } 
      } 
     } 
     else 
      fileList = new LinkedList<File>(Arrays.asList(folder.listFiles())); 

     for (File f: fileList) System.out.println(f.getName()); 
} 

這會返回我的D:驅動器上所有* .mpp文件的列表。

我也建議使用

 for (File file : listOfFiles) { 
      Matcher match = wildCardPattern.matcher(file.getName()); 
      if (match.matches()) { 
       fileList.add(file); 
      } 
     } 
+0

適合我!問題是我沒有在開始時初始化fileList,並且正如你所建議的那樣,如果使用while而不是while。謝謝 –

0

我建議你看看FilenameFilter類,看看它是否有助於簡化你的代碼。至於你的正則表達式,我認爲你需要逃避「。」它的工作性質。

+0

其實我沒有概率與我的正則表達式,唯一的事情是我沒有知道如何將匹配的文件放在單獨的文件列表中。 –