¿Cómo obtengo un InputStream de una URL?
por ejemplo, quiero tomar el archivo en la URL wwww.somewebsite.com/a.txt
y leerlo como InputStream en Java, a través de un servlet.
He intentado
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
pero lo que obtuve fue un error:
java.io.FileNotFoundException
java
url
inputstream
Oso blanco
fuente
fuente
servlets
etiqueta? No hayjavax.servlet.*
API involucrada aquí. Tendría exactamente el mismo problema al hacerlo en una clase Java simple con unmain()
método.Respuestas:
Úselo
java.net.URL#openStream()
con una URL adecuada (¡incluido el protocolo!). P.ejVer también:
fuente
Tratar:
fuente
(a)
wwww.somewebsite.com/a.txt
no es una 'URL de archivo'. No es una URL en absoluto. Si lo colocahttp://
al frente, sería una URL HTTP, que es claramente lo que pretende aquí.(b)
FileInputStream
es para archivos, no URL.(c) La forma de obtener un flujo de entrada desde cualquier URL es a través de
URL.openStream(),
oURL.getConnection().getInputStream(),
que es equivalente, pero es posible que tenga otras razones para obtener elURLConnection
y jugar con él primero.fuente
Su código original usa FileInputStream, que es para acceder a archivos alojados en el sistema de archivos.
El constructor que usó intentará ubicar un archivo llamado a.txt en la subcarpeta www.somewebsite.com del directorio de trabajo actual (el valor de la propiedad del sistema user.dir). El nombre que proporcione se resuelve en un archivo mediante la clase Archivo.
Los objetos URL son la forma genérica de resolver esto. Puede utilizar URL para acceder a archivos locales, pero también a recursos alojados en la red. La clase de URL admite el protocolo file: // además de http: // o https: //, por lo que está listo para comenzar.
fuente
Java puro:
Utilizo este método con cierto éxito. Se maneja redirecciones y uno puede pasar un número variable de cabeceras HTTP como
Map<String,String>
. También permite redireccionamientos de HTTP a HTTPS .Llamada de ejemplo completa
fuente
HttpURLConnection
ya seguirá las redirecciones a menos que usted le diga que no lo haga, lo que no ha hecho.HttpURLConnection
ya sigue los redireccionamientos por defecto, como ya dije.Aquí hay un ejemplo completo que lee el contenido de la página web dada. La página web se lee desde un formulario HTML. Usamos
InputStream
clases estándar , pero podría hacerse más fácilmente con la biblioteca JSoup.Estas son las dependencias de Maven. Usamos la biblioteca Apache Commons para validar cadenas de URL.
El
ReadWebPage
servlet lee el contenido de la página web dada y lo envía de vuelta al cliente en formato de texto sin formato. La tarea de leer la página está delegada aWebPageReader
.WebPageReader
valida la URL y lee el contenido de la página web. Devuelve una cadena que contiene el código HTML de la página.Finalmente, esta es la página de inicio que contiene el formulario HTML. Esto está tomado de mi tutorial sobre este tema.
fuente