File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getName());
przy użyciu metod String :
File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));
Czy ktoś zrobił porównanie wydajności różnych metod w tym pytaniu?
zmiażdż
@crush Nie sądzę, że Paths.getuzyskuje dostęp do systemu plików, więc nie spodziewałbym się, że wydajność będzie istotnie różna od podłańcucha / indexOf.
assylias
7
Dlaczego nie istnieje na Androidzie? dziwne.
programista Androida
12
Tak, Path radzi sobie z zależnym od platformy problemem slash / backslash, ale tylko jeśli ścieżka do pliku pochodzi z tego samego komputera (lub platformy). Zastanów się: przesyłasz plik Internet Exploreri ma on ścieżkę, "C:\\Hello\\AnotherFolder\\The File Name.PDF"ale kod działa na komputerze z systemem Unix / Linux, a następnie p.getFileName()zwróci całą ścieżkę, nie tylko The File Name.PDF.
Pozwoli to odzyskać indeks ostatniego \w swoim Stringi ekstrakt z wszystkiego, co przychodzi po niego do fileName.
Jeśli masz Stringinny separator, dostosuj, lastIndexOfaby użyć tego separatora. (Jest nawet przeciążenie, które akceptuje całość Stringjako separator).
Pominąłem to w powyższym przykładzie, ale jeśli nie masz pewności, skąd Stringpochodzi lub co może zawierać, możesz sprawdzić, czy lastIndexOfzwraca wartość nieujemną, ponieważ Javadoc twierdzi , że zwróci
Nie należy używać żadnego z nich, ponieważ jest to zależne od platformy. /na Unix i \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like File` lub Paths.
Automatico
3
Czy File.separatorzależy również od platformy? A może to zadziała ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
Jonathan
File.separator i File.separatorChar są zarówno „/” w wersji JDK dla UNIX / Linux / macOS, jak i „\” w wersji dla Windows.
可 可 Jacky
2
File.separatornie zawsze tu będzie działać, ponieważ w systemie Windows nazwę pliku można oddzielić jednym "/"lub "\\".
DodgyCodeException
10
Inne odpowiedzi nie do końca działały w moim konkretnym scenariuszu, w którym czytam ścieżki pochodzące z innego systemu operacyjnego niż mój obecny. Aby rozwinąć, zapisuję załączniki wiadomości e-mail zapisane z platformy Windows na serwerze Linux. Nazwa pliku zwrócona z JavaMail API to coś w rodzaju „C: \ temp \ hello.xls”
Możesz użyć obiektu FileInfo, aby uzyskać wszystkie informacje o swoim pliku.
FileInfo f =newFileInfo(@"C:\Hello\AnotherFolder\The File Name.PDF");MessageBox.Show(f.Name);MessageBox.Show(f.FullName);MessageBox.Show(f.Extension);MessageBox.Show(f.DirectoryName);
Odpowiedzi:
wystarczy użyć File.getName ()
przy użyciu metod String :
źródło
Alternatywne użycie
Path
(Java 7+):Pamiętaj, że podział łańcucha
\\
zależy od platformy, ponieważ separator plików może się różnić.Path#getName
zajmuje się tym problemem dla ciebie.źródło
Paths.get
uzyskuje dostęp do systemu plików, więc nie spodziewałbym się, że wydajność będzie istotnie różna od podłańcucha / indexOf.Internet Explorer
i ma on ścieżkę,"C:\\Hello\\AnotherFolder\\The File Name.PDF"
ale kod działa na komputerze z systemem Unix / Linux, a następniep.getFileName()
zwróci całą ścieżkę, nie tylkoThe File Name.PDF
.toString()
jest takie dziwne.Używanie
FilenameUtils
w Apache Commons IO :źródło
Biorąc pod uwagę
String
pytanie, o które pytasz, jestmusimy wyodrębnić wszystko po ostatnim separatorze, tj.
\
. To nas interesuje.Możesz to zrobić
Pozwoli to odzyskać indeks ostatniego
\
w swoimString
i ekstrakt z wszystkiego, co przychodzi po niego dofileName
.Jeśli masz
String
inny separator, dostosuj,lastIndexOf
aby użyć tego separatora. (Jest nawet przeciążenie, które akceptuje całośćString
jako separator).Pominąłem to w powyższym przykładzie, ale jeśli nie masz pewności, skąd
String
pochodzi lub co może zawierać, możesz sprawdzić, czylastIndexOf
zwraca wartość nieujemną, ponieważ Javadoc twierdzi , że zwróciźródło
Od 1.7
źródło
możesz użyć ścieżki = C: \ Hello \ AnotherFolder \ TheFileName.PDF
źródło
/
na Unix i\`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like
File` lubPaths
.File.separator
zależy również od platformy? A może to zadziała ...String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separator
nie zawsze tu będzie działać, ponieważ w systemie Windows nazwę pliku można oddzielić jednym"/"
lub"\\"
.Inne odpowiedzi nie do końca działały w moim konkretnym scenariuszu, w którym czytam ścieżki pochodzące z innego systemu operacyjnego niż mój obecny. Aby rozwinąć, zapisuję załączniki wiadomości e-mail zapisane z platformy Windows na serwerze Linux. Nazwa pliku zwrócona z JavaMail API to coś w rodzaju „C: \ temp \ hello.xls”
Rozwiązanie, z którym skończyłem:
źródło
Rozważ przypadek, w którym Java jest wieloplatformowa:
źródło
Metoda bez uzależnienia i dba o .. , . i zduplikowane separatory.
Przypadek testowy:
Może getFileName jest nieco mylące, ponieważ zwraca także nazwy katalogów. Zwraca nazwę pliku lub ostatniego katalogu w ścieżce.
źródło
wypakuj nazwę pliku za pomocą wyrażenia java *.
źródło
Metoda getFileName () metody java.nio.file.Path używana do zwracania nazwy pliku lub katalogu wskazywanego przez ten obiekt ścieżki.
Ścieżka getFileName ()
Na przykład:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
źródło
Możesz użyć obiektu FileInfo, aby uzyskać wszystkie informacje o swoim pliku.
źródło