Ler arquivo que esta no servidor web

6 respostas
L

Vamos supor que eu tenho a seguinte url:

http://www.guj.com.br/arquivo.xml

este arquivo, esta acessível livremente para qualquer pessoa.

Eu tenho uma aplicação rodando no meu desktop que precisa ler esse arquivo xml…na verdade eu preciso criar uma instância de File com ele…como eu faço isso?

O que eu gostaria basicamente é dar um:

File file = new File("http://www.guj.com.br/arquivo.xml");

é possível? como?

Obrigado!

6 Respostas

E

Como vc quer fazer não é possível, pois para ler os dados de um arquivo público na Web, é preciso fazer a comunicação com o webserver usando protocolo HTTP, coisa q a class File não faz.

Para fazer isto vc pode usar o HttpClient da Apache, que faz a comunicação com o server, e carrega os bytes do arquivo.

Outra maneira de fazer é via Sockets, mas ai é mais manual, e não é muito elegante.

http://jakarta.apache.org/commons/httpclient/

http://jakarta.apache.org/commons/httpclient/tutorial.html

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.*;

public class HttpClientTutorial {
  
  private static String url = "http://www.apache.org/";

  public static void main(String[] args) {
    // Create an instance of HttpClient.
    HttpClient client = new HttpClient();

    // Create a method instance.
    GetMethod method = new GetMethod(url);
    
    // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
    		new DefaultHttpMethodRetryHandler(3, false));

    try {
      // Execute the method.
      int statusCode = client.executeMethod(method);

      if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: " + method.getStatusLine());
      }

      // Read the response body.
      byte[] responseBody = method.getResponseBody();

      // Deal with the response.
      // Use caution: ensure correct character encoding and is not binary data
      System.out.println(new String(responseBody));

    } catch (HttpException e) {
      System.err.println("Fatal protocol violation: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println("Fatal transport error: " + e.getMessage());
      e.printStackTrace();
    } finally {
      // Release the connection.
      method.releaseConnection();
    }  
  }
}

Depois com o array dos bytes no responseBody, vc pode fazer o que quiser, gravar no disco e fazer uma instancia do File.

:wink:

_

Você pode acessar o arquivo com uma URLConnection também:

http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html

Se você ler e gravar no seu PC, voce consegue uma instancia de File.

J

Porque o pessoal nunca olha nos tutoriais do GUJ antes?

http://www.guj.com.br/java.tutorial.artigo.5.1.guj
Acredito que o tutorial acima irá te ajudar.

L

ManchesteR:
Porque o pessoal nunca olha nos tutoriais do GUJ antes?

Porque eu queria ver se não tinha outro jeito de fazer…não queria fazer desse jeito! Mas agora com as respostas do colega to vendo que não é possível…

pode ter certeza que eu não me encaixo nesse perfil de pessoas que não pesquisa no Google antes de perguntar…

J

Desculpa, mas eu não quis ofender e muito menos fazer uma critica diretamente para apenas uma pessoa.
Mas o que se vê bastante é pessoas fazendo perguntas antes mesmo de pesquisar no google, no forum, nos artigos e etc.

Sobre sua pergunta, se você já tinha conhecimento desse meio de ler um arquivo da web, você deveria ter citado no seu tópico, por exemplo “Pessoal, eu quero ler um arquivo da internet, eu sei que dá para fazer do jeito usando URLConnection, mas eu não gostei, bla bla bla, existe uma outra maneira mais facil de fazer?”
Se você tivesse escrito isso, pode ter certeza que eu nem iria responder, porque a única maneira que eu sei é através do URLConnection, que por sinal, eu conheci, aprendi e já usei na prática graças ao tutorial do GUJ.

E

Ainda não entendi o q q não é possível, tudo é possível!!!

URLConnection é a maneira mais básica de fazer isto, para situações simples resolve, mas para casos mais complexos, como authentication, e post e multipart não serve, por isso o melhor é usar o HttpClient.

Mas neste caso a URLConnection até resolvia o teu problema, vc q ta complicando e não esta mostrando o teu problema direito, vc diz que não dá!? Claro que dá! Acho que vc não sabe o que quer…

Afinal vc quer um File?! Mas pra q?! Pra fazer um InputStream?! Isto pode ser feito diretamente apartir de um array de Bytes.

Com um array de Bytes vc também pode gravar o arquivo no disco e depois carregar o objeto File, se fizer tanta questão disto.

Criado 17 de maio de 2007
Ultima resposta 17 de mai. de 2007
Respostas 6
Participantes 4