2009-06-18 11 views
30

Mam String, która zapewnia bezwzględną ścieżkę do pliku (łącznie z nazwą pliku). Chcę uzyskać tylko nazwę pliku. Jaki jest najłatwiejszy sposób na zrobienie tego?Uzyskaj nazwę pliku z lokalizacji pliku w języku Java

Musi być tak ogólny, jak to możliwe, ponieważ nie wiem z góry, jaki będzie adres URL. Nie mogę po prostu utworzyć obiektu URL i użyć getFile() - wszystko byłoby jednak idealne, gdyby było możliwe - ponieważ niekoniecznie jest to prefiks http:// może to być c:/lub coś podobnego.

Odpowiedz

78
new File(fileName).getName(); 

lub

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

Należy zauważyć, że pierwszy roztwór jest zależna od systemu. Uwzględnia on tylko charakter separatora ścieżki systemowej. Więc jeśli twój kod działa w systemie Unix i otrzyma ścieżkę Windows, to nie zadziała. Dzieje się tak w przypadku przesyłania plików wysyłanych przez Internet Explorer.

+1

Wiesz, napięty termin realizacji projektu uczy szybkiego pisania. – akarnokd

+10

Pierwszy parametr replaceAll jest niepoprawny, ponieważ ukośnik jest znakiem escape zarówno w Java String, jak iw wyrażeniach regularnych. Powinien to być fileName.replaceAll ("\\\\", "/") ... – Ivan

+3

Również, jak było to akceptowane tyle razy, mimo że podString nie powinien być wielbłądowy i powinien być "podłańcuchowy" wszystkie małe litery do dotrzeć do metody podciągu macierzystego API String, chyba że używasz tutaj czegoś innego, ale powinno to być zauważone. – bcmoney

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

Apache Commons IO zapewnia klasę FilenameUtils który daje dość bogaty zestaw funkcji użytkowych na łatwe uzyskanie różnych składników nazwach, choć Klasa java.io.File zapewnia podstawy.

+1

Zawsze go używaj. Nie mogę narzekać. –

1

Oto 2 sposoby (oba są niezależny od systemu operacyjnego).

Korzystanie Paths: Od 1,7

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

Korzystanie FilenameUtils w Apache Commons IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt"); 
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt"); 
Powiązane problemy