Como obtenho um InputStream de um URL?
por exemplo, quero pegar o arquivo no url wwww.somewebsite.com/a.txt
e lê-lo como um InputStream em Java, por meio de um servlet.
eu tentei
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
mas o que recebi foi um erro:
java.io.FileNotFoundException
java
url
inputstream
Urso polar
fonte
fonte
servlets
tag? Não hájavax.servlet.*
API envolvida aqui. Você teria exatamente o mesmo problema ao fazer isso em uma classe Java simples com ummain()
método.Respostas:
Use
java.net.URL#openStream()
com um URL adequado (incluindo o protocolo!). Por exemploVeja também:
fonte
Experimentar:
fonte
(a)
wwww.somewebsite.com/a.txt
não é um 'URL de arquivo'. Não é um URL. Se você colocassehttp://
na frente, seria uma URL HTTP, que é claramente o que você pretende aqui.(b)
FileInputStream
é para arquivos, não URLs.(c) A maneira de obter um fluxo de entrada de qualquer URL é via
URL.openStream(),
ouURL.getConnection().getInputStream(),
equivalente, mas você pode ter outros motivos para obterURLConnection
e brincar com ele primeiro.fonte
Seu código original usa FileInputStream, que é para acessar arquivos hospedados do sistema de arquivos.
O construtor usado tentará localizar um arquivo denominado a.txt na subpasta www.somewebsite.com do diretório de trabalho atual (o valor da propriedade do sistema user.dir). O nome fornecido é resolvido para um arquivo usando a classe File.
Objetos de URL são a maneira genérica de resolver isso. Você pode usar URLs para acessar arquivos locais, mas também recursos hospedados na rede. A classe URL suporta o protocolo file: // além de http: // ou https: //, então você está pronto para começar.
fonte
Java puro:
Com algum sucesso, uso esse método. Ele lida com redirecionamentos e pode-se passar um número variável de cabeçalhos HTTP como
Map<String,String>
. Ele também permite redirecionamentos de HTTP para HTTPS .Exemplo completo de chamada
fonte
HttpURLConnection
já seguirá os redirecionamentos, a menos que você diga para não fazer isso, o que você não fez.HttpURLConnection
já segue redirecionamentos por padrão, como já disse.Aqui está um exemplo completo que lê o conteúdo de uma determinada página da web. A página da web é lida a partir de um formulário HTML. Usamos
InputStream
classes padrão , mas isso poderia ser feito mais facilmente com a biblioteca JSoup.Essas são as dependências do Maven. Usamos a biblioteca Apache Commons para validar strings de URL.
O
ReadWebPage
servlet lê o conteúdo de determinada página da web e o envia de volta ao cliente em formato de texto simples. A tarefa de ler a página é delegadaWebPageReader
.WebPageReader
valida o URL e lê o conteúdo da página da web. Ele retorna uma string contendo o código HTML da página.Finalmente, esta é a página inicial que contém o formulário HTML. Isso foi tirado do meu tutorial sobre este tópico.
fonte