2012-04-02 44 views
0

我就從哪裏文件由掩模界定第三方FTP站點拉文件的項目工作範圍,可以說「XXX'MMddy.FILE其中XXX是供應商代碼和y是一年中的最後一位數字。的Java面膜格式的日期

我的應用程序只關心與掩碼匹配的文件,但不關心文件的實際日期。目前,我們正在使用Java Calendar對象創建一個月的日期列表,並遍歷它以創建每個可能的掩碼,直到匹配或確定爲無效。我覺得應該有更好的方法來做到這一點...

因此,重申,在consise問題中,有沒有辦法使用該面具,而不創建每個日期的實例來比較實際的文件名?

即XXX04022.FILE符合XXXMMddy.FILE

回答

2

你可以實現的FilenameFilter對File.listFiles使用:

public class YourFilenameFilter extends java.io.FilenameFilter 
{ 
    public boolean accept(java.io.File file, String name) 
    { 
     boolean shouldAccept = false; 
     if(name!=null) 
     { 
      java.util.regex.Pattern p = java.util.regex.Pattern.compile("[A-Z][A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9].FILE"); 
      java.util.regex.Matcher m = p.matcher(name); 
      if(m.matches()) { 
       shouldAccept = true; 
      } 
     } 
     return shouldAccept; 
    } 
} 
+0

爲什麼不只是一個'acceptFromFTP(字符串的localName):boolean'方法與單'return localname.matches(「\\ w {3} \\ d {6} [。] FILE」)'?當然,將這種類型的FTP'ls'查詢的輸入,而不是'mget *',然後匹配是非常明智的。 – 2012-04-02 17:55:19

+0

這真是太好了,正是我在找的東西。只有其他問題是.FILE擴展名可以改變,但只有我關心的特定的,即(.ABC,.CDE,.FAS,.CAD)。我將如何支持? – shuniar 2012-04-03 12:35:16

+0

使用模式:'「^ [A-Z] {3} [0-9] {6} [。](FILE | ADC | CDE | FAS | CAD)$」'。 – GavinCattell 2012-04-03 14:24:17