StringVariable enthält einen Dateinamen , C:\Hello\AnotherFolder\The File Name.PDF. Wie erhalte ich nur den Dateinamen The File Name.PDFals String?
Ich hatte vor, den String zu teilen, aber das ist nicht die optimale Lösung.
StringVariable enthält einen Dateinamen , C:\Hello\AnotherFolder\The File Name.PDF. Wie erhalte ich nur den Dateinamen The File Name.PDFals 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#getNamekümmert sich um dieses Problem für Sie.
Paths.getauf das Dateisystem zugegriffen wird, daher würde ich nicht erwarten, dass sich die Leistung wesentlich von einer Teilzeichenfolge / einem Index unterscheidet.
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.
toString()ist so umständlich.
Verwenden FilenameUtilsin 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 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
-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.separatorauch plattformabhängig? Oder würde das funktionieren ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separatorfunktioniert 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);