2012-04-02 9 views
0

ich an einem Projekt arbeite, die Dateien von einer Dritten FTP-Site zieht, wo die Dateien durch eine Maske definiert sind, kann sagen, ‚XXX'MMddy.FILE wo XXX ist die Lieferantencode und y ist die letzte Stelle des Jahres.Java-Maske Formatierung für Datumsbereich

Meine Anwendung bezieht sich nur auf die Dateien, die der Maske entsprechen, aber interessiert sich nicht für das tatsächliche Datum in der Datei. Gegenwärtig erstellen wir eine Liste von Daten im Monat mit dem Java-Objekt Calendar und durchlaufen diese, um jede mögliche Maske zu erstellen, bis eine Übereinstimmung gefunden wird oder sie für ungültig erklärt wird. Ich denke, es sollte einen besseren Weg geben, dies zu tun ...

Also noch einmal, in einer Consise-Frage gibt es eine Möglichkeit, die Maske zu verwenden, ohne eine Instanz jedes Datums zu erstellen, um den tatsächlichen Dateinamen zu vergleichen?

dh XXX04022.FILE entspricht XXXMMddy.FILE

Antwort

2

Sie einen Filenamen auf File.listFiles verwenden implementieren könnte:

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

warum nicht nur eine 'acceptFromFTP (String lokaler Name): boolean' Methode mit einem einzigen 'return localname.matches (" \\ w {3} \\ d {6} [.] FILE ")'? Natürlich wäre es ziemlich klug, dies mit der Eingabe einer FTP 'ls'-Abfrage anstelle von' mget * 'zu verknüpfen und danach anzupassen. –

+0

Das ist großartig, genau das, was ich gesucht habe. Nur eine andere Frage, die ich habe, ist, dass sich die .FILE-Erweiterung ändern kann, aber es gibt nur bestimmte, die mir wichtig sind, d. H. (.ABC, .CDE, .FAS, .CAD). Wie würde ich das unterstützen? – shuniar

+0

Verwenden Sie das Muster: '"^[A-Z] {3} [0-9] {6} [.] (FILE | ADC | CDE | FAS | CAD) $ "'. – GavinCattell