Was ist in Java bei einem java.net.URL
oder einem String
in Form von http://www.example.com/some/path/to/a/file.xml
der einfachste Weg, den Dateinamen abzüglich der Erweiterung zu erhalten? In diesem Beispiel suche ich nach etwas, das zurückkehrt "file"
.
Ich kann mir verschiedene Möglichkeiten vorstellen, dies zu tun, aber ich suche nach etwas, das leicht zu lesen und kurz ist.
Antworten:
Anstatt das Rad neu zu erfinden, können Sie Apache commons-io verwenden :
quelle
URL#getPath
undString#substring
oderPath#getFileName
oderFile#getName
).quelle
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
nochhttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
einen Sonderfall für Dateinamen zulassen und hinzufügen, die kein a enthalten,.
funktioniert dies einwandfrei.Wenn Sie die Dateierweiterung nicht entfernen müssen, können Sie dies folgendermaßen tun, ohne auf fehleranfällige String-Manipulationen zurückgreifen zu müssen und ohne externe Bibliotheken zu verwenden. Funktioniert mit Java 1.7+:
quelle
URI.getPath()
gibt ein zurückString
, also verstehe ich nicht, warum es nicht funktionieren würdegetPath
und stattdessen die URI-Überladung verwenden.Paths.get(new URI(url))
? Das scheint für mich nicht zu funktionierenDies sollte ungefähr gekürzt werden (ich überlasse die Fehlerbehandlung Ihnen):
quelle
http://www.example.com/
oderhttp://www.example.com/folder/
) hatlastIndexOf
funktioniert so nicht. Aber die Absicht ist klar.quelle
Einzeiler:
Vollständiger Code (in einer Scala REPL):
Hinweis :
URI#gePath
Ist bereits intelligent genug, um Abfrageparameter und das Protokollschema zu entfernen. Beispiele:quelle
Get Dateinamen mit Extension , ohne Erweiterung , nur Erweiterung mit nur 3 line:
Protokoll Ergebnis:
Hoffe es wird dir helfen.
quelle
Ich habe mir Folgendes ausgedacht:
quelle
Halte es einfach :
quelle
url.getFile()
durchurl.toString()
und es funktioniert mit#
im Pfad.quelle
Es gibt einige Möglichkeiten:
Java 7-Datei-E / A:
Apache Commons:
Jersey verwenden:
Teilzeichenfolge:
quelle
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
Danke für die Idee!Hier ist der einfachste Weg, dies in Android zu tun. Ich weiß, dass es in Java nicht funktioniert, aber es kann Android-Anwendungsentwicklern helfen.
quelle
Erstellen Sie ein URL-Objekt aus der Zeichenfolge. Wenn Sie zum ersten Mal ein URL-Objekt haben, gibt es Methoden, mit denen Sie auf einfache Weise nahezu alle benötigten Informationen herausholen können.
Ich kann die Javaalmanac-Website nur empfehlen, die unzählige Beispiele enthält, aber inzwischen umgezogen ist. Vielleicht finden Sie http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html interessant:
quelle
Wenn Sie nur den Dateinamen von einer java.net.URL abrufen möchten (ohne Abfrageparameter), können Sie die folgende Funktion verwenden:
Zum Beispiel diese Eingabe-URL:
Würde in diese Ausgabe übersetzt String:
quelle
Ich habe festgestellt, dass einige URLs direkt an übergeben werden
FilenameUtils.getName
um unerwünschte Ergebnisse zurückzugeben, und dies muss abgeschlossen werden, um Exploits zu vermeiden.Beispielsweise,
kehrt zurück
was ich bezweifle, dass jemand erlauben will.
Die folgende Funktion scheint einwandfrei zu funktionieren und zeigt einige dieser Testfälle. Sie wird zurückgegeben,
null
wenn der Dateiname nicht ermittelt werden kann.Dies wird im folgenden Beispiel mit einigen einfachen Testfällen abgeschlossen:
quelle
Urls können am Ende Parameter haben, dies
quelle
/
kann in Fragment erscheinen. Sie werden das falsche Zeug extrahieren.Mit dem
Url
Objekt in urllib können Sie auf den nicht entkoppelten Dateinamen des Pfads zugreifen. Hier sind einige Beispiele:quelle
andys Antwort mit split () wiederholt:
quelle
quelle
Wie wäre es damit:
quelle
Verwenden Sie Folgendes , um den Dateinamen ohne Erweiterung und ohne Parameter zurückzugeben :
Um einen Dateinamen mit einer Erweiterung ohne Parameter zurückzugeben, verwenden Sie Folgendes :
quelle
Abgesehen von allen fortgeschrittenen Methoden ist mein einfacher Trick
StringTokenizer
:quelle
Wenn Sie Spring verwenden , gibt es einen Helfer für die Behandlung von URIs. Hier ist die Lösung:
quelle
Neue Datei zurückgeben (Uri.parse (url) .getPath ()). getName ()
quelle
quelle
Ich habe das gleiche Problem mit deinem. Ich habe es dadurch gelöst:
quelle
import java.io. *;
Ich hoffe, dies wird dir helfen.
quelle