Arquivo

Arquivo da Categoria ‘Java SE’

Como acessar sites (URL) com java

14, março, 2010

Boa tarde, estou aqui num raro momento de ócio e resolvi postar algo simples, que é acessar algum site com o Java e ler seu código HTML.

Para tal utilizaremos as classes URL e HTTPUrlConnection do pacote java.net.

Começamos criando uma instancia de URL, passando ao seu construtor uma String. Como visto no exemplo abaixo essa String é a própria URL que desejamos acessar.

java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br");

Detalhe que esse construtor pode lançar uma exception chamada MalformedURLException e essa mesma é uma exception verificada, então precisamos tratá-la no código, ficando assim nosso código:

try {
   java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br");
}catch (java.net.MalformedURLException e){
   System.out.println("Erro ao criar URL. Formato inválido.");
}

Existem alguns outros construtores para a classe java.net.URL, porem esse é o mais comum.

Depois que já temos a nossa URL, precisamos acessá-la. O Java já traz uma classe que nos abstrai muitos detalhes de baixo nível do protocolo HTTP. A classe é a java.net.HTTPURLConnection e usamos como a seguir:

java.net.HTTPURLConnection urlConnection = (java.net.HTTPURLConnection) url.openConnection();

Como o método retorna uma URLConnection abstrata, precisamos fazer o cast para nossa HTTPURLConnection, pois estamos tratando de uma transação HTTP.

Novamente precisamos tratar uma exception, nesse caso o método openConnection da URL pode retornar uma IOException, então modificando e juntando os códigos temos:

try {
   java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br");
   java.net.HTTPURLConnection urlConnection = (java.net.HTTPURLConnection) url.openConnection();
} catch (java.net.MalformedURLException e){
   System.out.println("Erro ao criar URL. Formato inválido.");
} catch (java.io.IOExcetpion e2) {
   System.out.println("Erro ao acessar URL.");
}

Sabendo que a classe MalformedURLException herda IOException poderíamos ter tratado somente a exception IOExceptin, mas deixei assim para que o erro fique mais especifico.

Tendo aberta a conexão precisamos pegar as informações, para isso abrimos a stream de input assim:

java.io.BufferedReader in = new java.io.BufferedReader(new java.ioInputStream(urlConnection.getInputStream()));

Também temos disponível o stream de Output, que pode ser conseguido através do método getOutputStream.
Com o stream de entrada (input), basta percorrermos o stream para mostrarmos a página HTML.

String line = null;
 
while( (line = in.readLine()) != null ){
   System.out.println(line);
}

Conforme fizemos, vamos ler linha por linha a página HTML e exibir na tela. Poderíamos ter usado qualquer outro leitor de streams.
Pronto, lemos uma página HTML utilizando Java. :)
Precisamos agora fechar a conexão e os streams abertos.

in.close();
urlConnection.disconnect();

IMPORTANTE: precisamos sempre fechar os streams antes da conexão, caso contrario lançaríamos uma exception!

O código completo ficaria assim:

package br.com.vaniomeurer.exemplos
 
import java.net.URL;
import java.net.HTTPURLConnection;
import java.net.MalformedURLException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class AcessarURL {
 
   public static void main(String args[]) {
 
      if (args.length == 0) {
         System.out.println("Não foi especificado nenhuma URL.");
         // Fechando aplicação.
         System.exit(1);
      }
 
      // Pegando a url passada como parametro.
      String urlName = args[0];
 
      try {
 
         URL url = new URL(urlName);
         HTTPURLConnection urlConnection = (HTTPURLConnection) url.openConnection();
         BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
 
         String line = null;
 
         while( (line = in.readLine()) != null ){
            System.out.println(line);
         }
 
         in.close();
         urlConnection.disconnect();
 
      } catch (MalformedURLException e){
         System.out.println("Erro ao criar URL. Formato inválido.");
         System.exit(1);
      } catch (IOException e2) {
         System.out.println("Erro ao acessar URL.");
         System.exit(1);
      }
 
   }
 
}

Compilando e executando o comando “java br.com.vaniomeurer.exemplos.AcessarURL http://www.vaniomeurer.com.br” teríamos impresso o código HTML desse site. :)

Espero que esse mini tutorial seja útil a alguém, como estou em uma máquina que não tem o JDK não pude compilar para testar, mas logo o faço e edito caso algo esteja errado.

Até, Vânio Meurer (vaninhO)

Vanio Meurer Java SE , ,

Desenhando o Fantasminha do PacMan com Java 2D

10, novembro, 2009

Buenas,

estava lendo o novo portal desenvolvimento de jogos, o Ponto V, que os colegas Vinicius Godoy Mendonça e Bruno Crivelari Sanches estão escrevendo e no post Pintando no Java 2D surgiu um desafio de desenhar o fantasminha do PacMan com Java2D.

Abaixo minha solução do desafio, não fico muito bonitinho, mas ta ai o código fonte que criei.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.QuadCurve2D;
import java.awt.geom.Rectangle2D;
 
import javax.swing.JFrame;
 
/**
 * Pintando fantasminha do PacMan com Java 2D.
 * @author Vânio Meurer
 * @since 10/11/2009 11:38:12
 */
public class FantasmaPacMan extends JFrame {
 
	private static final long serialVersionUID = 8366583475473482894L;
 
	private final static int TAMANHO_X = 100;
	private final static int TAMANHO_Y = 50;
	private final static int TAMANHO_X_PATA = 20;
	private final static int TAMANHO_Y_PATA = 50;
	private final static int DISTANCIA_X_PATA = 6;
	private final static int RAIO_OLHO = 13;
	private final static int RAIO_OLHO_CRISTALINO = 5;
	private final static int DISTANCIA_X_OLHOS = (RAIO_OLHO<<1)+10;
 
	public FantasmaPacMan() {
 
		super("Fantasminha Pac Man");
		this.setSize(300, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
 
	}
 
	public static void main(String[] args) {
 
		final FantasmaPacMan fpm = new FantasmaPacMan();
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				fpm.setVisible(true);
			}
		});
 
	}
 
	@Override
	public void paint(Graphics g) {
		super.paint(g);
 
		Graphics2D g2d = (Graphics2D) g.create();
 
		g2d.setPaint(Color.BLACK);
		g2d.fillRect(0, 0,this.getSize().width, this.getSize().height);
 
		pintarFantasma(g2d, Color.RED, 50, 50);
 
		pintarFantasma(g2d, Color.MAGENTA, 85, 150);
 
 
	}
 
	public void pintarFantasma(Graphics2D g2d, Color color, int x, int y) {
		g2d.setPaint(color);
		g2d.fill(new Ellipse2D.Float(x, y, TAMANHO_X, TAMANHO_Y));
		g2d.fill(new Rectangle2D.Float(x,y+(TAMANHO_Y>>1),TAMANHO_X, TAMANHO_Y>>1));
 
		int xBkp = x;
 
		g2d.fill(new QuadCurve2D.Float(x, y+TAMANHO_Y, x+(TAMANHO_X_PATA>>1), y+TAMANHO_Y+TAMANHO_Y_PATA, x+TAMANHO_X_PATA, y+TAMANHO_Y));
		x = x+TAMANHO_X_PATA+DISTANCIA_X_PATA;
		g2d.fill(new QuadCurve2D.Float(x, y+TAMANHO_Y, x+(TAMANHO_X_PATA>>1), y+TAMANHO_Y+TAMANHO_Y_PATA, x+TAMANHO_X_PATA, y+TAMANHO_Y));
		x = x+TAMANHO_X_PATA+DISTANCIA_X_PATA;
		g2d.fill(new QuadCurve2D.Float(x, y+TAMANHO_Y, x+(TAMANHO_X_PATA>>1), y+TAMANHO_Y+TAMANHO_Y_PATA, x+TAMANHO_X_PATA, y+TAMANHO_Y));
		x = x+TAMANHO_X_PATA+DISTANCIA_X_PATA+1;
		g2d.fill(new QuadCurve2D.Float(x, y+TAMANHO_Y, x+(TAMANHO_X_PATA>>1), y+TAMANHO_Y+TAMANHO_Y_PATA, x+TAMANHO_X_PATA, y+TAMANHO_Y));
 
		x = xBkp;
 
		g2d.setPaint(Color.WHITE);
		g2d.fill(new Ellipse2D.Float((x+(TAMANHO_X/3))-RAIO_OLHO,y+(TAMANHO_Y>>1)-RAIO_OLHO,RAIO_OLHO<<1,RAIO_OLHO<<1));
		g2d.setPaint(Color.BLUE);
		g2d.fill(new Ellipse2D.Float((x+(TAMANHO_X/3))-RAIO_OLHO_CRISTALINO,y+(TAMANHO_Y>>1)-RAIO_OLHO_CRISTALINO,RAIO_OLHO_CRISTALINO<<1,RAIO_OLHO_CRISTALINO<<1));
		g2d.setPaint(Color.WHITE);
		g2d.fill(new Ellipse2D.Float((x+(TAMANHO_X/3))-RAIO_OLHO + DISTANCIA_X_OLHOS,y+(TAMANHO_Y>>1)-RAIO_OLHO,RAIO_OLHO<<1,RAIO_OLHO<<1));
		g2d.setPaint(Color.BLUE);
		g2d.fill(new Ellipse2D.Float((x+(TAMANHO_X/3))-RAIO_OLHO_CRISTALINO + DISTANCIA_X_OLHOS,y+(TAMANHO_Y>>1)-RAIO_OLHO_CRISTALINO,RAIO_OLHO_CRISTALINO<<1,RAIO_OLHO_CRISTALINO<<1));
 
	}
 
}

Ao executar a classe temos:

Fantasma Pac Man - Java2D

Visite o site deles e tente resolver você também.

Até, Vânio Meurer (vaninhO)

Vanio Meurer Java SE , , ,