2014-06-26 61 views
0

我有一個「moreinfo」目錄,其中有一些html文件和其他文件夾。我在moreinfo目錄中搜索該文件(並在moreinfo沒有子目錄)與文件的toolId* .The名稱匹配是一樣toolId],更好的匹配字符串的正則表達式?

enter image description here

下面的代碼片段我如何寫它,如果基於廣域網卡過濾器(toolId*

toolId = delegatedAccess列表返回2文件(delegatedAccess.html & delegatedAccess.shopping.html)是他們那個檢查,直到最後發生期間和返回恰好與相匹配的文件編寫正則表達式的一個更好的辦法我的toolId?

infoDir =/Users/moreinfo 


private String getMoreInfoUrl(File infoDir, String toolId) { 
     String moreInfoUrl = null; 
     try { 
      Collection<File> files = FileUtils.listFiles(infoDir, new WildcardFileFilter(toolId+"*"), null); 
      if (files.isEmpty()==false) { 
      File mFile = files.iterator().next(); 
      moreInfoUrl = libraryPath + mFile.getName(); // toolId; 
     } 
    } catch (Exception e) { 
     M_log.info("unable to read moreinfo" + e.getMessage()); 
    } 
    return moreInfoUrl; 

} 
+1

那麼在你的例子中,你希望它只返回'delegatedAccess.html'文件?試試'toolID +「\\。[^ \\。] * $」' – clcto

+0

@clcto:是的。讓我試試你的現在 – pushya

+1

我的例子是正則表達式,但'WildcardFileFilter'不使用正則表達式。我不認爲有一種方法可以用'WildcardFileFilter'指定你想要的,但是你可以遍歷它返回的列表。 – clcto

回答

0

這就是我最終做的與所有偉大的評論。我做了字符串操作來解決我的問題。由於正則表達式不是正確的解決方案。

private String getMoreInfoUrl(File infoDir, String toolId) { 
    String moreInfoUrl = null; 
    try { 
     Collection<File> files = FileUtils.listFiles(infoDir, new WildcardFileFilter(toolId+"*"), null); 
     if (files.isEmpty()==false) { 
       for (File mFile : files) { 
        int lastIndexOfPeriod = mFile.getName().lastIndexOf('.'); 
        String fNameWithOutExtension = mFile.getName().substring(0,lastIndexOfPeriod); 
        if(fNameWithOutExtension.equals(toolId)) { 
         moreInfoUrl = libraryPath + mFile.getName(); 
         break; 
        } 

       } 
     } 
    } catch (Exception e) { 
     M_log.info("unable to read moreinfo" + e.getMessage()); 
    } 
    return moreInfoUrl; 

} 
+1

你的'if(files.isEmpty()== false)'可以一起移除。 for循環只會迭代列表中的元素。 – clcto