Jak uzyskać InputStream z adresu URL?
na przykład chcę pobrać plik pod adresem URL wwww.somewebsite.com/a.txt
i odczytać go jako strumień wejściowy w Javie za pośrednictwem serwletu.
próbowałem
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
ale otrzymałem błąd:
java.io.FileNotFoundException
java
url
inputstream
Biały niedźwiedź
źródło
źródło
servlets
tagu? Nie majavax.servlet.*
tu żadnego API. Dokładnie ten sam problem miałbyś, robiąc to w zwykłej, waniliowej klasie Java zmain()
metodą.Odpowiedzi:
Używaj
java.net.URL#openStream()
z odpowiednim adresem URL (łącznie z protokołem!). Na przykładZobacz też:
źródło
Próbować:
źródło
(a)
wwww.somewebsite.com/a.txt
nie jest „adresem URL pliku”. To wcale nie jest adres URL. Jeśli umieściszhttp://
na początku, będzie to adres URL HTTP, co wyraźnie jest tym, co zamierzasz tutaj.(b)
FileInputStream
dotyczy plików, a nie adresów URL.(c) Sposobem na uzyskanie strumienia wejściowego z dowolnego adresu URL jest użycie tego samego
URL.openStream(),
lubURL.getConnection().getInputStream(),
równoważnego, ale możesz mieć inne powody, abyURLConnection
najpierw pobrać plik i pobawić się nim.źródło
Twój oryginalny kod używa FileInputStream, który służy do uzyskiwania dostępu do plików hostowanych w systemie plików.
Konstruktor, którego użyłeś, spróbuje zlokalizować plik o nazwie a.txt w podfolderze www.somewebsite.com bieżącego katalogu roboczego (wartość właściwości systemowej user.dir). Podana nazwa jest tłumaczona na plik przy użyciu klasy File.
Obiekty URL są ogólnym sposobem rozwiązania tego problemu. Możesz użyć adresów URL, aby uzyskać dostęp do plików lokalnych, ale także zasobów hostowanych w sieci. Klasa URL obsługuje protokół file: // oprócz http: // lub https: //, więc nie ma problemu.
źródło
Czysta Java:
Z pewnym sukcesem używam tej metody. To obsługuje przekierowania i można przekazać zmienną liczbę nagłówków HTTP jako
Map<String,String>
. Umożliwia także przekierowania z HTTP do HTTPS .Pełne przykładowe wezwanie
źródło
HttpURLConnection
będzie już podążał za przekierowaniami, chyba że powiesz mu, aby tego nie robił, czego nie zrobiłeś.HttpURLConnection
już domyślnie następuje przekierowanie, jak już powiedziałem.Oto pełny przykład odczytujący zawartość podanej strony internetowej. Strona internetowa jest odczytywana z formularza HTML. Używamy
InputStream
klas standardowych , ale byłoby to łatwiejsze dzięki bibliotece JSoup.To są zależności Mavena. Używamy biblioteki Apache Commons do weryfikacji ciągów adresów URL.
ReadWebPage
Aplet odczytuje zawartość danej strony internetowej i wysyła go z powrotem do klienta w formacie tekstowym. Zadanie czytania strony jest delegowaneWebPageReader
.WebPageReader
sprawdza poprawność adresu URL i odczytuje zawartość strony internetowej. Zwraca ciąg znaków zawierający kod HTML strony.Wreszcie jest to strona główna zawierająca formularz HTML. To pochodzi z mojego tutoriala na ten temat.
źródło