2009-06-18 7 views
30

Ich habe eine String, die einen absoluten Pfad zu einer Datei (einschließlich des Dateinamens) bietet. Ich möchte nur den Namen der Datei erhalten. Was ist der einfachste Weg, dies zu tun?Abrufen des Dateinamens von einem Speicherort in Java

Es muss so allgemein wie möglich sein, da ich im Voraus nicht wissen kann, wie die URL sein wird. Ich kann nicht einfach ein URL-Objekt erstellen und getFile() verwenden - obwohl das ideal wäre, wenn es möglich wäre - da es nicht unbedingt ein http:// Präfix ist, könnte es c:/oder etwas Ähnliches sein.

Antwort

78
new File(fileName).getName(); 

oder

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/"); 
return idx >= 0 ? fileName.substring(idx + 1) : fileName; 

bemerken, dass das erste Lösungssystem abhängig ist. Es berücksichtigt nur das Pfadtrennzeichen des Systems. Wenn Ihr Code also auf einem Unix-System läuft und einen Windows-Pfad erhält, funktioniert er nicht. Dies ist der Fall, wenn Dateiuploads vom Internet Explorer gesendet werden.

+1

Sie wissen, dass enge Projekt Fälligkeitsdaten Ihnen lehrt, schnell zu tippen. – akarnokd

+10

Der erste replaceAll-Parameter ist falsch, da der Schrägstrich sowohl in der Java-Zeichenfolge als auch in regulären Ausdrücken ein Escape-Zeichen ist. Es sollte fileName.replaceAll ("\\\\", "/") sein ... – Ivan

+3

Auch wie wurde das so oft angenommen, obwohl subString nicht camel cased sein sollte und "substring" ganz klein sein sollte Erreichen Sie die Substring-Methode der nativen String-API, es sei denn, Sie verwenden etwas anderes hier, das sollte jedoch beachtet werden. – bcmoney

22
new File(absolutePath).getName(); 
17

Apache Commons IO bietet die FilenameUtils Klasse, die für Sie eine ziemlich breite Palette von Utility-Funktionen gibt leicht die verschiedenen Komponenten von Dateinamen zu erhalten, obwohl die Klasse java.io.File die Grundlagen bietet.

+1

Verwenden Sie es immer. Kann mich nicht beschweren. –

1

Hier sind 2 Möglichkeiten (beide sind unabhängig vom Betriebssystem.)

Paths Verwendung: Seit 1,7

Path p = Paths.get(<Absolute Path of Linux/Windows system>); 
String fileName = p.getFileName().toString(); 
String directory = p.getParent().toString(); 

Mit FilenameUtils in Apache Commons IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt"); 
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt"); 
Verwandte Themen