File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getName());
Verwenden von String-Methoden :
File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));
Path p =Paths.get("C:\\Hello\\AnotherFolder\\The File Name.PDF");String file = p.getFileName().toString();
Beachten Sie, dass das Aufteilen der Zeichenfolge \\plattformabhängig ist, da das Dateitrennzeichen variieren kann. Path#getNamekümmert sich um dieses Problem für Sie.
Hat jemand einen Leistungsvergleich der verschiedenen Methoden in dieser Frage durchgeführt?
Crush
@crush Ich glaube nicht, dass Paths.getauf das Dateisystem zugegriffen wird, daher würde ich nicht erwarten, dass sich die Leistung wesentlich von einer Teilzeichenfolge / einem Index unterscheidet.
Assylias
7
Wie kommt es, dass es auf Android nicht existiert? seltsam.
Android-Entwickler
12
Ja, Path bewältigt das plattformabhängige Problem von Schrägstrich / Backslash, jedoch nur, wenn der Dateipfad von demselben Computer (oder derselben Plattform) stammt. Bedenken Sie Folgendes: Sie laden eine Datei von hoch Internet Explorerund sie hat den Pfad, "C:\\Hello\\AnotherFolder\\The File Name.PDF"aber Ihr Code funktioniert auf einem Unix / Linux-Computer. Dann p.getFileName()wird der gesamte Pfad zurückgegeben, nicht nur The File Name.PDF.
Dadurch wird der Index des letzten \in Ihrem abgerufen Stringund alles extrahiert, was danach kommt fileName.
Wenn Sie ein StringTrennzeichen mit einem anderen haben, passen Sie das lastIndexOfan, um dieses Trennzeichen zu verwenden. (Es gibt sogar eine Überlastung , die ein Ganzes Stringals Trennzeichen akzeptiert .)
Ich habe es im obigen Beispiel weggelassen, aber wenn Sie sich nicht sicher sind, woher das Stringkommt oder was es enthalten könnte, sollten Sie überprüfen, ob das lastIndexOfeinen nicht negativen Wert zurückgibt, da das Javadoc angibt, dass es zurückkehren wird
Sie sollten keines davon verwenden, da es plattformabhängig ist. /unter Unix und \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like File` oder Paths.
Automatico
3
Ist File.separatorauch plattformabhängig? Oder würde das funktionieren ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
Jonathan
File.separator & File.separatorChar sind beide "/" unter UNIX / Linux / macOS-Version von JDK und beide "\" unter Windows-Version.
賈 可 Jacky
2
File.separatorfunktioniert hier nicht immer, da in Windows ein Dateiname entweder durch "/"oder getrennt werden kann "\\".
DodgyCodeException
10
Die anderen Antworten haben in meinem speziellen Szenario, in dem ich Pfade lese, die von einem anderen Betriebssystem als meinem aktuellen stammen, nicht ganz funktioniert. Zur Erläuterung speichere ich E-Mail-Anhänge, die von einer Windows-Plattform auf einem Linux-Server gespeichert wurden. Der von der JavaMail-API zurückgegebene Dateiname lautet etwa "C: \ temp \ hello.xls".
Vielleicht ist getFileName etwas verwirrend, weil es auch Verzeichnisnamen zurückgibt. Es gibt den Namen der Datei oder des letzten Verzeichnisses in einem Pfad zurück.
getFileName () -Methode von java.nio.file.Path, mit der der Name der Datei oder des Verzeichnisses zurückgegeben wird, auf die dieses Pfadobjekt zeigt.
Sie können das FileInfo-Objekt verwenden, um alle Informationen Ihrer Datei abzurufen.
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);
Antworten:
benutze einfach File.getName ()
Verwenden von String-Methoden :
quelle
Alternative Verwendung
Path
(Java 7+):Beachten Sie, dass das Aufteilen der Zeichenfolge
\\
plattformabhängig ist, da das Dateitrennzeichen variieren kann.Path#getName
kümmert sich um dieses Problem für Sie.quelle
Paths.get
auf das Dateisystem zugegriffen wird, daher würde ich nicht erwarten, dass sich die Leistung wesentlich von einer Teilzeichenfolge / einem Index unterscheidet.Internet Explorer
und sie hat den Pfad,"C:\\Hello\\AnotherFolder\\The File Name.PDF"
aber Ihr Code funktioniert auf einem Unix / Linux-Computer. Dannp.getFileName()
wird der gesamte Pfad zurückgegeben, nicht nurThe File Name.PDF
.toString()
ist so umständlich.Verwenden
FilenameUtils
in Apache Commons IO :quelle
In Anbetracht dessen
String
, wonach Sie fragen, istwir müssen alles nach dem letzten Trennzeichen extrahieren, dh.
\
. Das interessiert uns.Du kannst tun
Dadurch wird der Index des letzten
\
in Ihrem abgerufenString
und alles extrahiert, was danach kommtfileName
.Wenn Sie ein
String
Trennzeichen mit einem anderen haben, passen Sie daslastIndexOf
an, um dieses Trennzeichen zu verwenden. (Es gibt sogar eine Überlastung , die ein GanzesString
als Trennzeichen akzeptiert .)Ich habe es im obigen Beispiel weggelassen, aber wenn Sie sich nicht sicher sind, woher das
String
kommt oder was es enthalten könnte, sollten Sie überprüfen, ob daslastIndexOf
einen nicht negativen Wert zurückgibt, da das Javadoc angibt, dass es zurückkehren wirdquelle
Seit 1.7
quelle
Sie können path = C: \ Hello \ AnotherFolder \ TheFileName.PDF verwenden
quelle
/
unter Unix und\`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like
File` oderPaths
.File.separator
auch plattformabhängig? Oder würde das funktionieren ...String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separator
funktioniert hier nicht immer, da in Windows ein Dateiname entweder durch"/"
oder getrennt werden kann"\\"
.Die anderen Antworten haben in meinem speziellen Szenario, in dem ich Pfade lese, die von einem anderen Betriebssystem als meinem aktuellen stammen, nicht ganz funktioniert. Zur Erläuterung speichere ich E-Mail-Anhänge, die von einer Windows-Plattform auf einem Linux-Server gespeichert wurden. Der von der JavaMail-API zurückgegebene Dateiname lautet etwa "C: \ temp \ hello.xls".
Die Lösung, mit der ich endete:
quelle
Betrachten Sie den Fall, dass Java Multiplattform ist:
quelle
Eine Methode ohne Abhängigkeit und kümmert sich um .. , . und doppelte Trennzeichen.
Testfall:
Vielleicht ist getFileName etwas verwirrend, weil es auch Verzeichnisnamen zurückgibt. Es gibt den Namen der Datei oder des letzten Verzeichnisses in einem Pfad zurück.
quelle
Extrahieren Sie den Dateinamen mit Java Regex *.
quelle
getFileName () -Methode von java.nio.file.Path, mit der der Name der Datei oder des Verzeichnisses zurückgegeben wird, auf die dieses Pfadobjekt zeigt.
Pfad getFileName ()
Als Referenz:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
quelle
Sie können das FileInfo-Objekt verwenden, um alle Informationen Ihrer Datei abzurufen.
quelle