W Javie, biorąc pod uwagę a java.net.URL
lub a String
w postaci http://www.example.com/some/path/to/a/file.xml
, jaki jest najłatwiejszy sposób uzyskania nazwy pliku bez rozszerzenia? Więc w tym przykładzie szukam czegoś, co zwraca "file"
.
Potrafię wymyślić kilka sposobów, aby to zrobić, ale szukam czegoś, co jest łatwe do odczytania i krótkie.
Odpowiedzi:
Zamiast wymyślać koło na nowo, co powiesz na użycie Apache commons-io :
źródło
URL#getPath
iString#substring
lubPath#getFileName
lubFile#getName
).źródło
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
anihttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
i dodasz specjalny przypadek dla nazw plików, które nie zawierają.
znaku, to działa dobrze.Jeśli nie musisz pozbywać się rozszerzenia pliku, oto sposób na zrobienie tego bez uciekania się do podatnej na błędy manipulacji ciągami znaków i bez korzystania z zewnętrznych bibliotek. Działa z Javą 1.7+:
źródło
URI.getPath()
zwraca aString
, więc nie rozumiem, dlaczego to nie zadziałagetPath
i zamiast tego użyjesz przeciążenia URI.Paths.get(new URI(url))
? To wydaje się nie działać dla mniePowinno to zmniejszyć (pozostawię ci obsługę błędów):
źródło
http://www.example.com/
lubhttp://www.example.com/folder/
)lastIndexOf
nie działa w ten sposób. Ale zamiar jest jasny.źródło
Jedna wkładka:
Kompletny kod (w skali REPL):
Uwaga :
URI#gePath
jest wystarczająco inteligentny, aby usunąć parametry zapytania i schemat protokołu. Przykłady:źródło
Uzyskaj nazwę pliku z rozszerzeniem , bez rozszerzenia , tylko rozszerzenie z tylko 3 liniami:
Wynik dziennika:
Mam nadzieję, że to ci pomoże.
źródło
Wymyśliłem to:
źródło
Jest kilka sposobów:
We / wy plików Java 7:
Apache Commons:
Korzystanie z Jersey:
Podciąg:
źródło
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
dziękuję za pomysł!Nie komplikuj :
źródło
url.getFile()
zurl.toString()
i działa ze#
w ścieżce.źródło
Oto najprostszy sposób na zrobienie tego w systemie Android. Wiem, że to nie zadziała w Javie, ale może pomóc programistom aplikacji na Androida.
źródło
Utwórz obiekt adresu URL z metody String. Kiedy po raz pierwszy masz obiekt URL, istnieją metody umożliwiające łatwe pobranie dowolnego fragmentu informacji, których potrzebujesz.
Mogę zdecydowanie polecić witrynę internetową Javaalmanac, która ma mnóstwo przykładów, ale która od tego czasu się zmieniła. Może Cię zainteresować http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html :
źródło
Jeśli chcesz uzyskać tylko nazwę pliku z java.net.URL (bez parametrów zapytania), możesz użyć następującej funkcji:
Na przykład ten wejściowy adres URL:
Zostanie przetłumaczone na następujący ciąg wyjściowy:
źródło
Odkryłem, że niektóre adresy URL są przekazywane bezpośrednio, aby
FilenameUtils.getName
zwrócić niechciane wyniki i należy to opakować, aby uniknąć exploitów.Na przykład,
zwroty
na które wątpię, by ktokolwiek chciał na to pozwolić
Następująca funkcja wydaje się działać dobrze i pokazuje niektóre z tych przypadków testowych i zwraca,
null
gdy nie można określić nazwy pliku.Całość kończy się kilkoma prostymi przypadkami testowymi w poniższym przykładzie:
źródło
Adresy URL mogą mieć na końcu parametry
źródło
/
może pojawić się we fragmentach. Wydobędziesz niewłaściwe rzeczy.Url
Obiekt w urllib umożliwia dostęp Niecytowany pliku ścieżka jest. Oto kilka przykładów:źródło
odpowiedź Andy'ego została powtórzona za pomocą split ():
źródło
źródło
Co powiesz na to:
źródło
Aby zwrócić nazwę pliku bez rozszerzenia i bez parametrów, użyj:
Aby zwrócić nazwę pliku z rozszerzeniem bez parametrów, użyj tego:
źródło
Poza wszystkimi zaawansowanymi metodami moja prosta sztuczka to
StringTokenizer
:źródło
Jeśli używasz Springa , istnieje pomocnik do obsługi identyfikatorów URI. Oto rozwiązanie:
źródło
return new File (Uri.parse (url) .getPath ()). getName ()
źródło
źródło
Mam ten sam problem z twoim. Rozwiązałem to w ten sposób:
źródło
import java.io. *;
Mam nadzieję, że to Ci pomoże.
źródło