2017-06-05 2 views
0

Ich arbeite mit einem Coverity-Problem, das ich brauche, um einen Dateinamen mit regEx in Java zu validieren. In meiner Anwendung unterstützen .pdf, .txt, csv etc. Mein Dateiname, der vom Benutzer als xxx.txt erhalten wird. Ich möchte meinen Dateinamen mit richtigem Erweiterungsformat validieren und kein spezielles Zeichen anderes als Punkt (zB .txt) einschließen.Wie validiere ich einen Dateinamen in Java

filePath = properties.getProperty("DOCUMENT.LIBRARY.LOCATION"); 
String fileName = (String) request.getParameter("read"); 

Nur Wenn der Dateipfad eine ordnungsgemäße Validierung abgeschlossen ist, sollte der folgende Code funktionieren.

filePath += "/" + fileName; 
+0

Sie können regulären Ausdruck verwenden. https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html – amiramw

Antwort

0

Hier finden Sie aktuelle String.endsWith() Methode

if (fileName.endsWith(".pdf")) { 
    // do something 
} 

Oder verwenden Sie die Methode String.matches()

fileName.matches("\\.(pdf|txt|csv)$") 
+0

Soweit ich weiß. String # matches() entspricht der gesamten Sache, also müssten Sie '. + (Pdf | txt | csv)' machen. Bitte korrigiere mich, wenn ich falsch liege. – ArsenArsen

+0

'String # matches()' stimmt mit einem regulären Ausdruck überein, die Regex, die ich geschrieben habe, entspricht einer beliebigen Zeichenfolge mit einem '.' (Punktzeichen) einer der Erweiterungen in der Liste' (pdf | txt | csv) 'und dem Dollarzeichen ('$') mit dem Ende der Zeile übereinstimmt. Schaut euch das https://regex101.com/r/lHkU3N/1/ – freedev

+0

an Ich hatte eigentlich recht, ging einfach weiter und checkte. Sie können auch sehen, https://i.arsenarsen.com/dbgoy1wmui.png – ArsenArsen

0

Dies ist eine schreckliche Antwort, da sie nur den Dateinamen mit der gewünschten Erweiterung endet überprüft, aber überprüft den Rest des Dateinamens nicht wie in der ursprünglichen Frage gefordert. Etwas mehr wie dies wäre viel besser:

fileName.matches("[-_. A-Za-z0-9]+\\.(pdf|txt|csv)"); 

Dies stellt sicher, der Dateiname enthält nur ein oder mehr -, _, Punkt, Leerzeichen, oder alphanumerische Zeichen, gefolgt von genau einem PDF-, TXT- oder CSV am Ende des Dateinamens. Ihr System könnte andere Zeichen in Dateinamen zulassen und Sie könnten sie bei Bedarf zu dieser Liste hinzufügen. Ein alternative, weniger sichere Ansatz ist ‚schlecht‘ Zeichen so etwas wie zu verhindern: davon, dass in den Dateinamen vor der gewünschten Endung Erweiterung

fileName.matches("[^/\]+\\.(pdf|txt|csv)"); 

die einfach verhindert/oder \ Zeichen. Dies verhindert jedoch nicht potenziell gefährliche Zeichen, wie z. B. NULL-Bytes.