2012-04-02 5 views
0

я работаю над проектом, который вытягивает файлы с третьей стороной FTP-сайта, где файлы определяются с помощью маски, позволяет сказать «XXX'MMddy.FILE где XXX является код поставщика и y - последняя цифра года.Java маска форматирования для диапазона дат

Мое приложение относится только к файлам, соответствующим маске, но не заботится о фактической дате в файле. В настоящее время мы создаем список дат месяцем назад с объектом Java Calendar и итерацией через него, чтобы создать каждую возможную маску до тех пор, пока она не будет соответствовать или не будет признана недействительной. Я чувствую, что должен быть лучший способ сделать это ...

Таким образом, чтобы повторить в циничном вопросе, есть ли способ использовать маску, не создавая экземпляр каждой даты для сравнения с фактическим именем файла?

т.е. 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 (String LocalName): метод boolean' с одним 'return localname.matches (" \\ w {3} \\ d {6} [.] FILE ")'? Разумеется, было бы разумно подать этот вклад в какой-то запрос FTP 'ls' вместо' mget *' и последовать за ним. –

+0

Это здорово, именно то, что я искал. Только другой вопрос, который у меня есть, это расширение .FILE, которое может меняться, но есть только конкретные, о которых я забочусь, т. Е. (.ABC, .CDE, .FAS, .CAD). Как я могу это поддержать? – shuniar

+0

Используйте шаблон: ''^[A-Z] {3} [0-9] {6} [.] (FILE | ADC | CDE | FAS | CAD) $ ". – GavinCattell

Смежные вопросы