String
Variable enthält einen Dateinamen , C:\Hello\AnotherFolder\The File Name.PDF
. Wie erhalte ich nur den Dateinamen The File Name.PDF
als String?
Ich hatte vor, den String zu teilen, aber das ist nicht die optimale Lösung.
String
Variable enthält einen Dateinamen , C:\Hello\AnotherFolder\The File Name.PDF
. Wie erhalte ich nur den Dateinamen The File Name.PDF
als String?
Ich hatte vor, den String zu teilen, aber das ist nicht die optimale Lösung.
Antworten:
benutze einfach File.getName ()
File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");
System.out.println(f.getName());
Verwenden von String-Methoden :
File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");
System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));
Alternative Verwendung Path
(Java 7+):
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#getName
kümmert sich um dieses Problem für Sie.
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. Dann p.getFileName()
wird der gesamte Pfad zurückgegeben, nicht nur The File Name.PDF
.
toString()
ist so umständlich.
Verwenden FilenameUtils
in Apache Commons IO :
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
In Anbetracht dessen String
, wonach Sie fragen, ist
C:\Hello\AnotherFolder\The File Name.PDF
wir müssen alles nach dem letzten Trennzeichen extrahieren, dh. \
. Das interessiert uns.
Du kannst tun
String fullPath = "C:\\Hello\\AnotherFolder\\The File Name.PDF";
int index = fullPath.lastIndexOf("\\");
String fileName = fullPath.substring(index + 1);
Dadurch wird der Index des letzten \
in Ihrem abgerufen String
und alles extrahiert, was danach kommt fileName
.
Wenn Sie ein String
Trennzeichen mit einem anderen haben, passen Sie das lastIndexOf
an, um dieses Trennzeichen zu verwenden. (Es gibt sogar eine Überlastung , die ein Ganzes String
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 das lastIndexOf
einen nicht negativen Wert zurückgibt, da das Javadoc angibt, dass es zurückkehren wird
-1 wenn es kein solches Vorkommen gibt
Sie können path = C: \ Hello \ AnotherFolder \ TheFileName.PDF verwenden
String strPath = path.substring(path.lastIndexOf("\\")+1, path.length());
/
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
.
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:
String filenameWithPath = "C:\\temp\\hello.xls";
String[] tokens = filenameWithPath.split("[\\\\|/]");
String filename = tokens[tokens.length - 1];
Betrachten Sie den Fall, dass Java Multiplattform ist:
int lastPath = fileName.lastIndexOf(File.separator);
if (lastPath!=-1){
fileName = fileName.substring(lastPath+1);
}
Eine Methode ohne Abhängigkeit und kümmert sich um .. , . und doppelte Trennzeichen.
public static String getFileName(String filePath) {
if( filePath==null || filePath.length()==0 )
return "";
filePath = filePath.replaceAll("[/\\\\]+", "/");
int len = filePath.length(),
upCount = 0;
while( len>0 ) {
//remove trailing separator
if( filePath.charAt(len-1)=='/' ) {
len--;
if( len==0 )
return "";
}
int lastInd = filePath.lastIndexOf('/', len-1);
String fileName = filePath.substring(lastInd+1, len);
if( fileName.equals(".") ) {
len--;
}
else if( fileName.equals("..") ) {
len -= 2;
upCount++;
}
else {
if( upCount==0 )
return fileName;
upCount--;
len -= fileName.length();
}
}
return "";
}
Testfall:
@Test
public void testGetFileName() {
assertEquals("", getFileName("/"));
assertEquals("", getFileName("////"));
assertEquals("", getFileName("//C//.//../"));
assertEquals("", getFileName("C//.//../"));
assertEquals("C", getFileName("C"));
assertEquals("C", getFileName("/C"));
assertEquals("C", getFileName("/C/"));
assertEquals("C", getFileName("//C//"));
assertEquals("C", getFileName("/A/B/C/"));
assertEquals("C", getFileName("/A/B/C"));
assertEquals("C", getFileName("/C/./B/../"));
assertEquals("C", getFileName("//C//./B//..///"));
assertEquals("user", getFileName("/user/java/.."));
assertEquals("C:", getFileName("C:"));
assertEquals("C:", getFileName("/C:"));
assertEquals("java", getFileName("C:\\Program Files (x86)\\java\\bin\\.."));
assertEquals("C.ext", getFileName("/A/B/C.ext"));
assertEquals("C.ext", getFileName("C.ext"));
}
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.
Extrahieren Sie den Dateinamen mit Java Regex *.
public String extractFileName(String fullPathFile){
try {
Pattern regex = Pattern.compile("([^\\\\/:*?\"<>|\r\n]+$)");
Matcher regexMatcher = regex.matcher(fullPathFile);
if (regexMatcher.find()){
return regexMatcher.group(1);
}
} catch (PatternSyntaxException ex) {
LOG.info("extractFileName::pattern problem <"+fullPathFile+">",ex);
}
return fullPathFile;
}
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/
Sie können das FileInfo-Objekt verwenden, um alle Informationen Ihrer Datei abzurufen.
FileInfo f = new FileInfo(@"C:\Hello\AnotherFolder\The File Name.PDF");
MessageBox.Show(f.Name);
MessageBox.Show(f.FullName);
MessageBox.Show(f.Extension );
MessageBox.Show(f.DirectoryName);