Java tutorial
/* Copyright (C) 2001-2012, Joao Medeiros, Paulo Vilela (grafix2.com) Este arquivo parte do programa Grafix2.com Grafix2.com um software livre; voc pode redistribui-lo e/ou modifica-lo dentro dos termos da Licena Pblica Geral GNU como publicada pela Fundao do Software Livre (FSF); na verso 2 da Licena. Este programa distribuido na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral GNU para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral GNU junto com este programa, se no, veja uma cpia em <http://www.gnu.org/licenses/> */ /* * TrazArquivo.java * * Created on 18 de Julho de 2007, 22:39 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package grafix.basedados; import grafix.auxiliar.Base64; import grafix.telas.secundarias.FormAtualizacao; import org.apache.commons.httpclient.URI; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.*; import org.apache.commons.httpclient.params.HttpMethodParams; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.zip.GZIPInputStream; public class Download { private String url; private String arquivo; private boolean usaProxy; private String servidorProxy; private int portaProxy; private String usuarioProxy; private String senhaProxy; private boolean mostraProgresso; private FormAtualizacao formAtualizacao; public Download(String url, boolean mostraProgresso) { this.mostraProgresso = mostraProgresso; this.setUrl(url); this.usaProxy = false; } public Download(String url, String arquivo, boolean mostraProgresso) { this(url, mostraProgresso); this.setArquivo(arquivo); } public Download(String url, String arquivo, boolean mostraProgresso, FormAtualizacao formAtualizacao) { this(url, arquivo, mostraProgresso); this.formAtualizacao = formAtualizacao; } public Download(String url, String servidorProxy, int portaProxy, String usuarioProxy, String senhaProxy, boolean mostraProgresso) { this(url, mostraProgresso); this.usaProxy = true; this.servidorProxy = servidorProxy; this.portaProxy = portaProxy; this.usuarioProxy = usuarioProxy; this.senhaProxy = senhaProxy; } public Download(String url, String arquivo, String servidorProxy, int portaProxy, String usuarioProxy, String senhaProxy, boolean mostraProgresso) { this(url, arquivo, mostraProgresso); this.usaProxy = true; this.servidorProxy = servidorProxy; this.portaProxy = portaProxy; this.usuarioProxy = usuarioProxy; this.senhaProxy = senhaProxy; } public Download(String url, String arquivo, String servidorProxy, int portaProxy, String usuarioProxy, String senhaProxy, boolean mostraProgresso, FormAtualizacao formAtualizacao) { this(url, arquivo, mostraProgresso, formAtualizacao); this.usaProxy = true; this.servidorProxy = servidorProxy; this.portaProxy = portaProxy; this.usuarioProxy = usuarioProxy; this.senhaProxy = senhaProxy; } public int baixaArquivo() { // Create an instance of HttpClient. HttpClient client = new HttpClient(); int retorno = 0; // Create a method instance. if (this.usaProxy) { client.getHostConfiguration().setProxy(this.servidorProxy, this.portaProxy); client.getState().setProxyCredentials(new AuthScope(this.servidorProxy, this.portaProxy), new UsernamePasswordCredentials(this.usuarioProxy, this.senhaProxy)); client.getParams().setAuthenticationPreemptive(true); } URI url2; String ff = null; try { url2 = new URI(this.getUrl(), false); ff = url2.toString(); } catch (URIException ex) { ex.printStackTrace(); } catch (NullPointerException ex) { ex.printStackTrace(); } GetMethod method = new GetMethod(ff); byte[] arquivo = null; long totalBytesRead = 0; long loopBytesRead = 0; // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); byte[] buffer = new byte[4096]; int progresso = 0; try { int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + method.getStatusCode() + " " + method.getStatusLine()); retorno = method.getStatusCode(); } else { long contentLength = method.getResponseContentLength(); File file = new File(this.getArquivo()); FileOutputStream os = new FileOutputStream(file); InputStream stream = method.getResponseBodyAsStream(); while ((loopBytesRead = stream.read(buffer)) != -1) { for (int i = 0; i < loopBytesRead; i++) { os.write(buffer[i]); } totalBytesRead += loopBytesRead; progresso = (int) ((float) totalBytesRead / contentLength * 100); if (progresso >= 0 || progresso <= 100) { // System.out.println("download " + progresso + " %"); if (this.mostraProgresso) formAtualizacao.definirPercentualProgresso(progresso); } } os.flush(); os.close(); stream.close(); } } catch (HttpException e) { retorno = 2; System.err.println("Fatal protocol violation: " + e.getMessage()); e.printStackTrace(); } catch (IOException e) { retorno = 3; System.err.println("Fatal transport error: " + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } if (this.mostraProgresso) formAtualizacao.definirPercentualProgresso(0); return retorno; } public String baixaString() { String retorno = null; URL url = null; URLConnection con = null; try { url = new URL(this.url); con = url.openConnection(); } catch (Exception ex) { ex.printStackTrace(); return retorno; } if (this.usaProxy) { System.setProperty("http.proxySet", "true"); System.setProperty("http.proxyHost", this.servidorProxy); System.setProperty("http.proxyPort", String.format("%d", this.portaProxy)); System.setProperty("http.proxyType", "4"); if (this.usuarioProxy != null) { if (this.usuarioProxy.length() > 0) { String proxyUser = this.usuarioProxy, proxyPassword = this.senhaProxy; con.setRequestProperty("Proxy-Authorization", "Basic " + Base64.encodeToString((proxyUser + ":" + proxyPassword).getBytes(), false)); } } } try { int len = con.getContentLength(); byte[] b = new byte[len]; InputStream is = con.getInputStream(); is.read(b, 0, len); String s = new String(b); return s; } catch (MalformedURLException ex) { System.out.println("Erro"); return ""; } catch (IOException ex) { System.out.println("Erro"); System.out.println(ex); return ""; } } public String baixaArquivoGZIP() { String retorno = null; URL url = null; URLConnection con = null; try { url = new URL(this.url); con = url.openConnection(); } catch (Exception ex) { ex.printStackTrace(); return retorno; } if (this.usaProxy) { System.setProperty("http.proxySet", "true"); System.setProperty("http.proxyHost", this.servidorProxy); System.setProperty("http.proxyPort", String.format("%d", this.portaProxy)); System.setProperty("http.proxyType", "4"); if (this.usuarioProxy != null) { if (this.usuarioProxy.length() > 0) { String proxyUser = this.usuarioProxy, proxyPassword = this.senhaProxy; con.setRequestProperty("Proxy-Authorization", "Basic " + Base64.encodeToString((proxyUser + ":" + proxyPassword).getBytes(), false)); } } } GZIPInputStream gzip; try { gzip = new GZIPInputStream(con.getInputStream()); ByteArrayOutputStream os = new ByteArrayOutputStream(); int readLen = 0; byte[] buffer = new byte[4096]; int bytes = 0; // int sfs = gzip. //con.getInputStream().available(); int total = con.getContentLength(); if (this.mostraProgresso) this.formAtualizacao.definirPercentualProgresso(0); while ((readLen = gzip.read(buffer, 0, buffer.length)) > 0) { os.write(buffer, 0, readLen); // int sfs = con.getInputStream().available(); bytes += readLen; if (this.mostraProgresso) this.formAtualizacao.informaBytesLidos(bytes); // float sd = (float)(total-sfs)/(float)total*100.0f; // this.formAtualizacao.informarLog("Baixados" + (total - sfs) + " bytes de " + total + "progresso " + (int) sd); // this.formAtualizacao.definirPercentualProgresso( (int) sd); } retorno = os.toString(); } catch (IOException ex) { ex.printStackTrace(); } return retorno; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getArquivo() { return arquivo; } public void setArquivo(String arquivo) { this.arquivo = arquivo; } }