Bagaimana cara mendapatkan InputStream dari URL?
misalnya, saya ingin mengambil file di url wwww.somewebsite.com/a.txt
dan membacanya sebagai InputStream di Java, melalui servlet.
Saya sudah mencoba
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
tapi yang saya dapatkan adalah kesalahan:
java.io.FileNotFoundException
java
url
inputstream
Shirohige
sumber
sumber
servlets
tag? Tidak adajavax.servlet.*
API yang terlibat di sini. Anda akan memiliki masalah yang persis sama saat melakukannya di kelas Java vanilla biasa dengan sebuahmain()
metode.Jawaban:
Gunakan
java.net.URL#openStream()
dengan URL yang tepat (termasuk protokolnya!). MisalnyaLihat juga:
sumber
Mencoba:
sumber
(a)
wwww.somewebsite.com/a.txt
bukan 'URL file'. Ini sama sekali bukan URL. Jika Anda meletakkanhttp://
di depannya, itu akan menjadi URL HTTP, yang jelas-jelas Anda maksudkan di sini.(b)
FileInputStream
untuk file, bukan URL.(c) Cara untuk mendapatkan aliran input dari URL mana pun adalah melalui
URL.openStream(),
atauURL.getConnection().getInputStream(),
yang setara, tetapi Anda mungkin memiliki alasan lain untuk mendapatkanURLConnection
dan memainkannya terlebih dahulu.sumber
Kode asli Anda menggunakan FileInputStream, yang untuk mengakses file yang dihosting sistem file.
Konstruktor yang Anda gunakan akan mencoba mencari file bernama a.txt di subfolder www.somewebsite.com dari direktori kerja saat ini (nilai properti sistem user.dir). Nama yang Anda berikan diselesaikan ke file menggunakan kelas File.
Objek URL adalah cara umum untuk menyelesaikan ini. Anda dapat menggunakan URL untuk mengakses file lokal tetapi juga sumber daya yang dihosting jaringan. Kelas URL mendukung protokol file: // selain http: // atau https: // jadi Anda siap melakukannya.
sumber
Java Murni:
Dengan beberapa keberhasilan saya menggunakan metode ini. Ini menangani pengalihan dan seseorang dapat meneruskan sejumlah variabel dari header HTTP sebagai
Map<String,String>
. Ini juga memungkinkan pengalihan dari HTTP ke HTTPS .Contoh panggilan lengkap
sumber
HttpURLConnection
sudah akan mengikuti pengalihan kecuali Anda menyuruhnya untuk tidak, yang belum Anda lakukan.HttpURLConnection
sudah mengikuti redirect secara default, seperti yang sudah saya nyatakan.Berikut adalah contoh lengkap yang membaca konten halaman web yang diberikan. Halaman web dibaca dari bentuk HTML. Kami menggunakan
InputStream
kelas standar , tetapi itu bisa dilakukan dengan lebih mudah dengan perpustakaan JSoup.Ini adalah dependensi Maven. Kami menggunakan perpustakaan Apache Commons untuk memvalidasi string URL.
The
ReadWebPage
servlet membaca isi dari halaman web yang diberikan dan mengirimkannya kembali ke klien dalam format teks biasa. Tugas membaca halaman didelegasikan keWebPageReader
.WebPageReader
memvalidasi URL dan membaca konten halaman web. Ini mengembalikan string yang berisi kode HTML halaman.Terakhir, ini adalah beranda yang berisi formulir HTML. Ini diambil dari tutorial saya tentang topik ini.
sumber