Arquivo da categoria: Java

Clonar objetos no Java

No Java o método clone() provê a criação de uma cópia similar ao objeto original. Em outras palavras o método copia campo a campo da classe clonada.
Para tornar uma classe clonável no Java são necessárias duas ações: implementar a interface “Cloneable” e sobrescrever o método clone(). É preciso ter em mente que ao clonar uma instância de uma classe os atributos primitivos (int, float, double, char, byte, etc…) são uma nova cópia do objeto original, já o atributo tipado (objeto de classe) acoplado terá por padrão copia da referencia original, ou seja, se mudamos o valor no atributo do objeto acoplado, todos que enxergam a mesma referencia serão afetado com a alteração.
Vamos ao primeiro exemplo de clonagem simples demonstrando a questão do atributo referenciado:
Classe Main

package mydelirium;
/**
 *
 * @author Ricardo Spinoza
 */
public class MyDelirium {

    /**
     * @param args the command line arguments
     * @throws java.lang.CloneNotSupportedException
     */
    public static void main(String[] args) throws CloneNotSupportedException{
        
        Dog dogOriginal = new Dog();        
        dogOriginal.setName("Ted");
        dogOriginal.setRace("Pitbull");
        
        Person personOriginal = new Person();
        personOriginal.setAge(24);
        personOriginal.setName("Jonnhy");
        personOriginal.setDogFriend(dogOriginal);
        
        Person personClone = (Person) personOriginal.clone();        
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());
        //System.out.println("orginal equals cloned: " + personOriginal.equals(personClone));
        
        System.out.println("Dog é uma referencia comum entre os dois objetos (original e clonado)? "
                + personOriginal.getDogFriend().equals(personClone.getDogFriend()));
        
        System.out.println();
        
        personOriginal.getDogFriend().setName("Xena");
        personOriginal.getDogFriend().setRace("Yourshire Terrier");
        personOriginal.setAge(33);
        
        System.out.println("Ou seja, ao mudar o objeto Dog teremos: \n");
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());                
    } 
}

Classe Person

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Person implements Cloneable{
    
    private int age;    
    private String name;
    
    private Dog dogFriend;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dog getDogFriend() {
        return dogFriend;
    }

    public void setDogFriend(Dog dogFriend) {
        this.dogFriend = dogFriend;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); 
    }
    
}

Classe Dog

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Dog{
 
    private String name;
    private String race;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }
}

A saída do código será:

<pre>original >> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
Dog é uma referencia comum entre os dois objetos (original e clonado)? true
Ou seja, ao mudar o objeto Dog teremos: 
original >> name: Jonnhy age:33 dog name:Xena dog race:Yourshire Terrier
cloned >>>> name: Jonnhy age:24 dog name:Xena dog race:Yourshire Terrier

No exemplo clonamos o objeto original que possui o atributo dogFriend (da classe Dog) o qual possui a mesma referencia nos objetos personOriginal e personClone. Observe que qualquer mudança de valor no atributo dogFriend o objeto original e clonado são afetados.
Para resolver o problema da referencia neste cenário precisaremos adicionar o método clone() na nossa classe Dog (obviamente implementar a interface Clonable) e alterar o método clone() definido na nossa classe Person para clonar o objeto Dog e assim isolar as referências de cada objeto.
Segue as mudanças no segundo exemplo:
Classe Main

package mydelirium;
/**
 *
 * @author Ricardo Spinoza
 */
public class MyDelirium {

    /**
     * @param args the command line arguments
     * @throws java.lang.CloneNotSupportedException
     */
    public static void main(String[] args) throws CloneNotSupportedException{
        
        Dog dogOriginal = new Dog();        
        dogOriginal.setName("Ted");
        dogOriginal.setRace("Pitbull");
        
        Person personOriginal = new Person();
        personOriginal.setAge(24);
        personOriginal.setName("Jonnhy");
        personOriginal.setDogFriend(dogOriginal);        
        Person personClone = (Person) personOriginal.clone();                
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());        
        System.out.println("Dog é uma referencia comum entre os dois objetos (original e clonado)? "
                + personOriginal.getDogFriend().equals(personClone.getDogFriend()));
        
        System.out.println();
        
        personOriginal.getDogFriend().setName("Xena");
        personOriginal.getDogFriend().setRace("Yourshire Terrier");
        personOriginal.setAge(33);
        
        System.out.println("Ao mudar o objeto Dog no objeto original teremos: \n");
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());
                
    }
    
}

Classe Person

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Person implements Cloneable{
    
    private int age;    
    private String name;
    
    private Dog dogFriend;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dog getDogFriend() {
        return dogFriend;
    }

    public void setDogFriend(Dog dogFriend) {
        this.dogFriend = dogFriend;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Person cloned = (Person)super.clone();
        //faz o clone do objeto dogFriend
        cloned.setDogFriend((Dog)cloned.getDogFriend().clone());
        return cloned;
    }
    
}

Classe Dog

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Dog implements Cloneable{
 
    private String name;
    private String race;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

A saída do código será:

original >> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
Dog é uma referencia comum entre os dois objetos (original e clonado)? false

Ao mudar o objeto Dog no objeto original teremos: 

original >> name: Jonnhy age:33 dog name:Xena dog race:Yourshire Terrier
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull

Por fim, a clonagem de objetos facilita criar cópias de objeto, porém é preciso ter alguns cuidados com relação a referencia de objetos tipados entre o objeto original e o clonado.

Dúvidas, criticas, sugestões, por favor escreva 🙂
Referencia:

API Java Object clone() http://http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#clone()
Leia mais em A guide to object cloning in java <http://howtodoinjava.com/2012/11/08/a-guide-to-object-cloning-in-java/&gt;

Deixe um comentário

Arquivado em Java

Java classe System é mto mais que só System.out.prinln

A classe System(pacote java.lang) é uma das classe mais populares(existe deste a versão jdk1.0) do Java em particular os métodos de saída(out): print, println, e de entrada(in): System.in. Tal popularidade deve-se justamente ao fato das facilidades de entrada e saída de dados, mas a classe System não é só isto. Ela prove outros recursos úteis para os desenvolvedores (saída de erro, leitura de variáveis de ambiente, e otras cositas más). Fuçando na API da classe http://docs.oracle.com/javase/7/docs/api/java/lang/System.html dá pra ver que ela tem muitas coisas legais, então decidi montar uma relação com alguns exemplos pra ilustrar o uso. Se alguém tiver mais algo a acrescentar, sinta-se a vontade  🙂

System.in:  entrada padrão input stream  – utiliza a classe InputStream do pacote java.io.

Scanner scan = new Scanner(System.in);
System.out.println ("Digite: ");
String entrada = scan.nextLine();
System.out.println ("Você digitou: " +entrada);

Na primeira linha o objeto System.in provê recurso para leitura do “input stream” dos dados digitados (teclado) pelo usuário, segundo a API é possível inputar dados por outros sources. A classe Scanner auxilia no tratamento deste input stream tornando a maninpulação mais intuitiva ao desenvolvedor. Tem um post bem bacana a repeito da classe Scanner, escrito por Marcio Ballem e pode ser conferido no endereço: http://mballem.wordpress.com/2012/05/01/ler-dados-do-teclado-com-a-classe-scanner/

System.out:   saída padrão output stream – utiliza a classe PrintStream do pacote java.io.

System.out.print():

Imprime na console Java o valor de entrada.

Suporta vários tipos na assinatura do seu método, veja a lista completa http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println()

Obs. O suporte é o mesmo que da lista de tipos do println. Imagino que os caras na api reaproveitaram o print e adicionaram o “\n” no final pra ser tão igual rs.

Exemplo:

boolean b = false;
//imprime o valor booelano
System.out.print("booleano:" + b);

int i = -1;        
//imprime o valor do primitivo inteiro e dá um enter (\n") no final 
System.out.print("inteiro:" + i + "\n");
        
Double db = 10d;
float ft = 20f;
BigDecimal bgd = new BigDecimal(30);
//imprime os valores Double(objeto), float(primitivo) e BigDecimal(objeto) 
System.out.print("double: " + db + " float: " + ft + " BigDecimal: " + bgd);

Veja a saída dos três prints ( os dois primeiros numa linha só), a instrução \n dá enter na linha.

booleano:falseinteiro:-1
double: 10.0 float: 20.0 BigDecimal: 30

System.out.println():

Imprime na console java o valor de entrada e dá um ENTER no final da linha.

Este é o clássico que até no Eclipse, se vc digitar “syso” + cltrl espaço ele escreve System.out.println() automáticamente.

Suporta vários tipos na assinatura do seu método, veja a lista completa http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println()

Exemplos:

boolean b = false;

//imprime o valor booelano e dá um enter no final
System.out.println("booleano:" + b);

int i = -1;

//imprime o valor do primitivo inteiro e dá um enter no final
System.out.println("inteiro:" + i);

Double db = 10d;
float ft = 20f;
BigDecimal bgd = new BigDecimal(30);

//imprime os valores Double(objeto), float(primitivo) e BigDecimal(objeto) e dá um enter no final
System.out.println("double: " + db + " float: " + ft + " BigDecimal: " + bgd);

saída:

booleano:false
inteiro:-1
double: 10.0 float: 20.0 BigDecimal: 30

System.out.printf:

Imprime na console Java o valor de entrada formatado de acordo com parâmetro especificado.
Exemplo:

char three[] = { 't', 'h', 'r', 'e', 'e' };
System.out.printf("%b %n %c %n %s %n %s %n %d %n" 
+ "%d %n %g %n %g %n %s %n", 
!false, '3'
, new String(three)
, "Three"
,3
, Long.MAX_VALUE
, Math.PI, Double.MAX_VALUE
, new Object());

retirado de: http://www.java2s.com/Code/Java/Development-Class/Systemoutprintfbncnsnsndn.htm

saída:


true

3

three

Three

3

9223372036854775807

3.14159

1.79769e+308

java.lang.Object@61de33

Além do exemplo vale comentar que a formatação fica a gosto do freguês, veja:

String a = "string";
double dbb = 4445.67555;
int c = 60;

System.out.println();
System.out.printf("%s - %.2f - %.4f - %0,20.3f - %d\n",  a, dbb,  dbb, dbb,c);

saída:

string - 4445,68 - 4445,6756 - 000000000004.445,676 - 60

Note que:
%.2f imprime duas casas após o ponto
%.4f imprime quatro casas após o ponto
%0,20.3f imprime zeros a esquerda até atingir 20 caracteres, leva em consideração ponto e virgulas tbem.
Existe outros formatos “%”, veja uma lista com mais exemplos no link: http://jexp.ru/index.php/Java_by_API/java.lang/System.out.printf

System.err:  saída padrão de erro output stream – utiliza a classe PrintStream do pacote java.io

É similar ao funcionamento de System.out porém é normalmente utilizado para imprimir texto de erro.

Por exemplo, se vc quiser fazer o seu próprio logador de error (tipo looggind da vida) num arquivo .txt, poderia fazer algo do tipo:

File erros = new File("log_de_erros.txt");
FileOutputStrem fout = new FileOutputStream(erros);
System.setErr(fout);

Daí todos os erros enviados a System.err serão registrados no seu arquivo “log_de_erros.txt”

Outro exemplo para demonstrar à diferença:

try {
   InputStream input = new FileInputStream("c:\\aplicacao\\dados.txt");
    System.out.println("Aberto arquivo...");
} catch (IOException e){//ops... deu BO
   System.err.println("Falha ao tentar abrir o arquivo:");
   e.printStackTrace();
}

Tem IDE a exemplo do Eclipse que printa em vermelho mensagens de erro.

Não é só isto meu povo, tem mais métodos bacanas.

System.arraycopy:

Copia um array

char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];

//copyFrom - array de origem
//2 - indice do começo da cópia do array de origem para o array de destino, ou seja, vai copiar a partir desta posição
//copyTo - array que irá receber a cópia
//0 - análogo ao índice do começo da cópia do array de origem, só que aplicado ao array de destino.
//7 - número de elementos copiados do array de origem. siz, lenght, tamanho...
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));

System.getProperty(String chave) e getProperties():

Possibilitar pegar as propriedades do sistema. A listar completa pode ser conferida no link http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getProperties()

Exemplos:

Trazer o usuário logado. Passa a chave “user.name” veja relação de outras chaves no link da lista completa, ok?

//Traz o nome do usuário logado no sistema
System.out.println(System.getProperty ("user.name"));

saída:

ricardo.spinoza

O método getProperties() traz uma relação com todas as propriedades do sistema corrente, veja exemplo:

System.getProperties().list(System.out);

saída:

-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jre7\bin
java.vm.version=21.1-b02
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=BR
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 1
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\workspace\oca
java.runtime.version=1.7.0_01-b08
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\Program Files\Java\jre7\lib\endorsed
os.arch=amd64
java.io.tmpdir=C:\Users\RICARD~1.PER\AppData\Local\T...
line.separator=
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 7
sun.jnu.encoding=Cp1252
java.library.path=C:\Program Files\Java\jre7\bin;C:\Win...
java.specification.name=Java Platform API Specification
java.class.version=51.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=6.1
user.home=C:\Users\ricardo.spinoza
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=Cp1252
java.specification.version=1.7
user.name=ricardo.spinoza
java.class.path=C:\workspace\oca\bin
java.vm.specification.version=1.7
sun.arch.data.model=64
java.home=C:\Program Files\Java\jre7
sun.java.command=Teste
java.specification.vendor=Oracle Corporation
user.language=pt
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.7.0_01
java.ext.dirs=C:\Program Files\Java\jre7\lib\ext;C:...
sun.boot.class.path=C:\Program Files\Java\jre7\lib\resour...
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64

System.getenv(String name) e System.getenv():

Retorna o valor de uma variavel de ambiente. Se houver esquema de segurança o metodo checkPermission é acionado pra validar permissão de acesso.
 
Exemplo:

String javaHome = System.getenv("JAVA_HOME");

//no windows similar ao comando echo %JAVA_HOME%
System.out.println("JAVA_HOME: "  + javaHome);

//no windows similar ao comando echo %USERNAME%

String userWindows = System.getenv("USERNAME");
System.out.println("USERNAME: "  + userWindows);

Há também o método Map<String,String> getenv() retorna um Map com todas as variávies de ambiente, veja exemplo:

Map<String, String> env = System.getenv();
for (String nomeVariavel : env.keySet()) {
  System.out.format("%s=%s\n", nomeVariavel, env.get(nomeVariavel));
}

System.exit(int valor):

Termina a execução corrente do programa. Por convenção valor diferente de ZERO é considerado termino anormal do programa.

//termino de execução normal
System.exit(0);

//termino de execução Anormal
System.exit(-1);

Outro exemplo que achei no stackoverflow http://stackoverflow.com/questions/6937660/difference-between-system-exit0-and-system-exit-1

public class Test {
  public static void main(String[] args) throws Exception {
    System.exit(args.length);
  }
}

Na linha de comando a execução do programa Java Test no primeiro caso length é zero “exit(0)“, pois não tem parametro, o programa termina com êxito e exibe a mensagem de sucesso, já no segundo caso é informado um parametro e valor de lenght passa a valer 1 “exit(1)” e o programa termina em estado anormal, note que a mensagem de sucesso não é exibida conforme visto logo abaixo.

~ $ java Test && echo Success!
Success!//retorno na console por causa do System.exit(0)

~ $ java Test boom && echo Success!
//SEM retorno na console por causa do System.exit(1)
//qqr coisa diferente se zero é terminação anormal

Finalizando, tentei expor neste post a importância desta API e o quanto é bem útil na vida do desenvolvedor. Espero que tenha sido útil pra alguém 🙂

Flw

Deixe um comentário

Arquivado em Java, Utilidades

Como passar parâmetros no include de uma pagina jsp

Simples, veja a sintaxe e exemplo abaixo:

sintaxe:

    <jsp:include page="{relativeURL | <%= expression %>}" flush="true" />
    OR
    <jsp:include page="{relativeURL | <%= expression %>}" flush="true" >
       <jsp:param name="parameterName"  value="{parameterValue | <%= expression %>}" />
    </jsp:include>

->>atributos:

page: localização da página jsp

page="{relativeURL | <%= expression %>}" 

flush: ativa a limpeza do buffer(flush) automaticamente.

flush="true"

jsp:param: clausula que permite passar um ou mais parâmetros em pares nome/valor para o arquivo jsp que será incluído.

<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />

exemplo:

Na página base:

<!-- faça a declaração do include jsp na página de base -->
<jsp:include page="minhaPagina.jsp" />
    <jsp:param name="parametro1" value="value1" />
    <jsp:param name="parametro2" value="value2" />
</jsp:include>

Na página incluída(minhaPagina.jsp):

<!-- na jsp minhaPagina, pegue os parametros com getParameter-->
parametro1: <%= request.getParameter("parametro1") %>
parametro2: <%= request.getParameter("parametro2") %>

Referências:
Syntax jsp include http://java.sun.com/products/jsp/tags/11/syntaxref1112.html
Passing Parameters to another jsp page http://www.exampledepot.com/egs/javax.servlet.jsp/caller.jsp.html

Deixe um comentário

Arquivado em HTML, Jsp

Java – Apache Commons – codificar e decodificar string

Antes de mais nada, se vc não está familiarizado com os conceitos de codificação e criptografia, entenda a diferença lendo o post http://unknownantisec.wordpress.com/2011/10/03/a-diferenca-entre-codificacao-e-criptografia/

Os dois método abaixo são especialmente utéis para ofuscar (pelo menos não ficar tão na cara) dados em lugares manjados: txt, properties, xml. Na minha opinião a vantagem de usar codificação/decoficiação é a simplicidade – a toque de caixa – de implementar o ofuscamento. Para o malandro desofuscar tem que saber qual o algoritmo que vc usou, e lembrando que não é criptografia aonde envolve chave privada para descriptografar os dados.

Dica: no GUJ tem um tópico com um exemplo (créditos Thingol) de implementação de criptografia com chave privada http://www.guj.com.br/java/35256-criptografia-de-dados-no-java

Import da lib – link com o donwload da lib no final do post

import org.apache.commons.codec.binary.Base64;
/**
* @brief Codifica string na base 64 (Encoder)
* @param string str - string à ser codigificada/criptografa
* @return string ofuscada
* @date 12/04/2012
* @see decodificaBase64Decoder(String str) Decoder
* [lib apache commons codec]
*/
public static String codificaBase64Encoder(String str) {
return new Base64().encodeToString(str.getBytes());
}

/**
* @brief DesCodifica string na base 64 (Decoder)
* @param string ofuscada - string pra à ser decodificada
* @return string desofuscada
* @date 12/04/2012
* @see codificaBase64Encoder(String str) Encoder
* [lib apache commons codec]
*/
public static String decodificaBase64Decoder(String str) {
return new String(new Base64().decode(str));
}

Exemplo de uso:

 String stringCodificada = codificaBase64Encoder("tio patinhas");
 //retorna: string ofuscada: dGlvIHBhdGluaGFz 
 String stringDecodificada = decodificaBase64Decoder(stringCodificada);
 //retorna: string desofuscada: tio patinhas

 System.out.println("- String Codificada: " + stringCodificada + "\n- String Decodificada: " + stringDecodificada);
 //retorna: Dada string ofucada 'dGlvIHBhdGluaGFz', retorna a string desofuscada: tio patinhas

Exemplo completo:
Obs. não esquecer de adicionar a lib no seu projeto.

package exemplo;

import org.apache.commons.codec.binary.Base64;

/**
 *
 * @author Ricardo
 */
public class Exemplo {

    /**
     * @brief Codifica string na base 64 (Encoder)
     * @param string str - string à ser codigificada/criptografa
     * @return string ofuscada
     * @date 12/04/2012
     * @see decodificaBase64Decoder(String str) Decoder [lib apache commons
     * codec]
     */
    public static String codificaBase64Encoder(String str) {
        return new Base64().encodeToString(str.getBytes());
    }

    /**
     * @brief DesCodifica string na base 64 (Decoder)
     * @param string ofuscada - string pra à ser decodificada
     * @return string desofuscada
     * @date 12/04/2012
     * @see codificaBase64Encoder(String str) Encoder [lib apache commons codec]
     */
    public static String decodificaBase64Decoder(String str) {
        return new String(new Base64().decode(str));
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        String stringCodificada = codificaBase64Encoder("tio patinhas");
        //retorna: string ofuscada: dGlvIHBhdGluaGFz 
        String stringDecodificada = decodificaBase64Decoder(stringCodificada);
        //retorna: string desofuscada: tio patinhas

        System.out.println("- String Codificada: " + stringCodificada + "\n- String Decodificada: " + stringDecodificada);
        //retorna: Dada string ofucada 'dGlvIHBhdGluaGFz', retorna a string desofuscada: tio patinhas

    }

}

Download da lib em http://commons.apache.org/codec/download_codec.cgi

É isto, se vc quiser contribuir com algum comentário, fique a vontade.

[]s
Ricardo

3 Comentários

Arquivado em Java, Utilidades

Java – metodo para remover caracteres de um string

/**
     * 
     * @brief Remove caracteres (charsRemove) da string de entrada.
     * 
     * @param str - string de entrada
     * @param charsRemove - string aonde deve ser informado os caracteres a ser removido da string de entrada.
     *  necessário definir um delimitador. exemplo: charsRemove="x;y;z" --> delimitador eh ";"
     * @param delimiter - string usada para separar os caracteres no split interno do método.
     * 
     * @author ricardo spinoza
     * @date 13/06/2012
     *   
     * @return string sem formatação  
     * */		
	public static String removeCaracteresFromString(String str, String charsRemove, String delimiter) {
		
			if (charsRemove!=null && charsRemove.length()>0 && str!=null) {
			
			String[] remover = charsRemove.split(delimiter);
			
			for(int i =0; i < remover.length ; i++) {
				//System.out.println("i: " + i + " ["+ remover[i]+"]");
				if (str.indexOf(remover[i]) != -1){
					str = str.replace(remover[i], "");
				}
			}
		}
		
	    return str;
	}

Exemplos de uso:

		//entrada 123/002-2
		//saida   123/0022
		System.out.println(removeCaracteresFromString("123/002-2", "-", ";"));
		
		//mudei o delimitador para pipe "x", note que no charsRemove tbem joguei o delimitador
		System.out.println(removeCaracteresFromString("666.123/002-2", ".x/x-", "x"));
		//entrada 666.123/002-2
		//saida  6661230022
		
		//remove os pontos da string
		System.out.println(removeCaracteresFromString("1.2.3/0.02-2", ".", ";"));
		//entrada 1.2.3/0.02-2
		//saida   123/002-2
		
		//remove as strings ".", "/" e "-" da string
		System.out.println(removeCaracteresFromString("123/002-2", ".;/;-", ";"));
		//entrada 123/002-2
		//saida   1230022

Acredito que com os exemplos de uso já dê sacar como o método funciona.
Sugestões de melhorias são bem vindas 🙂

T+

Deixe um comentário

Arquivado em Java, Utilidades

Configurar o Proxy no Maven

Entre no diretório (oculto) .m2 do Maven,  normalmente fica na pasta do usuário (Windows C:\Documents and Settings\ricardo\.m2 ou no Linux /home/ricardo/.m2)
Dentro da pasta edite o arquivo “settings.xml” (se não existir, crie-o) e cole/edite o trecho abaixo:

<settings>
<proxies>
<proxy>
<!--true seta o maven pra considerar proxy-->
<active>true</active>

<!-- protocolo que o proxy trabalha, http, https-->
<protocol>http</protocol>

<!-- endereço da url ou ip do proxy-->
<host>servidor.proxy.com</host>

<!-- porta de comunicacao do servidor de proxy, ex. 80, 8090, 3128-->
<port>3128</port>

<!-- normalemnte é o mesmo usuário de rede que é usado no proxy-->
<username>usuario</username>

<!-- senha do usuário-->
<password>senha</password>

<!-- endereços que não precisam passar pelo proxy-->
<nonProxyHosts>localhost|www.google.com|*.somewhere.com</nonProxyHosts>
</proxy>
</proxies>
</settings>

Obs. o arquivo settings.xml também pode ser configurado na pasta /conf dentro do diretório de instalação do maven. Eu prefiro configurar dentro do profile
mesmo pq cada usuário tem o seu usuário/senha de proxy e tals – cada loko com a sua mania.

Referencia:
Maven: Configuring a proxy <http://maven.apache.org/guides/mini/guide-proxies.html>

1 comentário

Arquivado em Ferramentas, Geral, Java, Linux, Windows

Exemplo de uso de HashMap

A classe HashMap é uma implementação da interface Map do pacote java.util, e possibilita trabalhar com mapeamento de objetos no esquema chave/valor, ou seja, informada a chave, resgato o valor.

Segue exemplo de uso:


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

//font: http://www.easywayserver.com/blog/java-map-example/

public class MapExample {

    public static void main(String[] args) {

        Map<Object,String> mp=new HashMap<Object, String>();

        // adding or set elements in Map by put method key and value pair
        mp.put(new Integer(2), "Two");
        mp.put(new Integer(1), "One");
        mp.put(new Integer(3), "Three");
        mp.put(new Integer(4), "Four");

        //Get Map in Set interface to get key and value
        Set s=mp.entrySet();

        //Move next key and value of Map by iterator
        Iterator it=s.iterator();

        while(it.hasNext())
        {
            // key=value separator this by Map.Entry to get key and value
            Map.Entry m =(Map.Entry)it.next();

            // getKey is used to get key of Map
            int key=(Integer)m.getKey();

            // getValue is used to get value of key in Map
            String value=(String)m.getValue();

            System.out.println("Key :"+key+"  Value :"+value);
        }
    }
}

Notas:
a classe HashMap não é sincronizada (perigoso em ambiente multi-threads) e não trabalha com ordenação dos elementos (Para map ordenado, veja TreeMap)

Deixe um comentário

Arquivado em Java

Java – Customizando formato de data com a classe SimpleDateFormat

Listagem com os formatos mais comuns para formatação de datas. A listagem completa pode ser conferida no javadoc da api

Format formatter;

// ano
formatter = new SimpleDateFormat("yy");    // 02
formatter = new SimpleDateFormat("yyyy");  // 2002

// mês
formatter = new SimpleDateFormat("M");     // 1
formatter = new SimpleDateFormat("MM");    // 01
formatter = new SimpleDateFormat("MMM");   // Jan
formatter = new SimpleDateFormat("MMMM");  // January

// dia
formatter = new SimpleDateFormat("d");     // 9
formatter = new SimpleDateFormat("dd");    // 09

// dia da semana
formatter = new SimpleDateFormat("E");     // Wed
formatter = new SimpleDateFormat("EEEE");  // Wednesday

// traz data de hoje
Date date = new Date();

// exemplos
formatter = new SimpleDateFormat("dd/MM/yyyy");
String s = formatter.format(date);
// 21/07/2011

formatter = new SimpleDateFormat("dd-MMM-yy");
s = formatter.format(date);
// 29-Jan-02

// exemplo com data e horário
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
s = formatter.format(date);
// 2002.01.29.08.36.33

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
s = formatter.format(date);
// Tue, 09 Jan 2002 22:14:02 -0500

Simples assim!!!

Referência:
Exemplos de uso: http://exampledepot.com/egs/java.text/FormatDate.html
JavaDoc da Api http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

1 comentário

Arquivado em Java

Java – Obtenha informações do sistema operacional, usuário e do Java do cliente facilmente com a API System Properties.

As informações do sistema operacional, usuário e particulariedades do Java do cliente podem ser acessadas com uso da API System Properties, mas especificamente o método System.getProperty(String chave) o qual trabalha com o conceito de chave-valor. Basta informar a chave (veja relação abaixo) na assinatura do método e obter o valor correspondente.  No final do post disponibilizei uma implementação dos uso das propriedades para ilustrar o uso da API :-).

Chave Significado
file.separator Character that separates components of a file path. This is “/” on UNIX and “\” on Windows.
java.io.tmpdir Default temp file path
java.home Installation directory for Java Runtime Environment (JRE)
java.class.version Java class format version number
java.class.path Path used to find directories and JAR archives containing class files. Elements of the class path are separated by a platform-specific character specified in the path.separator property.
java.home Java installation directory
java.specification.name Java Runtime Environment specification name
java.specification.vendor Java Runtime Environment specification vendor
java.specification.version Java Runtime Environment specification version
java.vendor Java Runtime Environment vendor
java.version Java Runtime Environment version
java.vendor.url Java vendor URL
java.vm.name Java Virtual Machine implementation name
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.version Java Virtual Machine implementation version
java.vm.specification.name Java Virtual Machine specification name
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.version Java Virtual Machine specification version
java.vendor JRE vendor name
java.vendor.url JRE vendor URL
java.version JRE version number
line.separator Line separator (“\n” on UNIX)
java.library.path List of paths to search when loading libraries
java.compiler Name of JIT compiler to use
os.arch Operating system architecture
os.name Operating system name
os.version Operating system version
java.ext.dirs Path of extension directory or directories
path.separator Path separator character used in java.class.path
line.separator Sequence used by operating system to separate lines in text files
user.name User account name
user.dir User’s current working directory
user.home User’s home directory
public class ExemploProperties {

	/**
	 * @param args
	 * @author Ricardo Spinoza
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("awt.toolkit="+System.getProperty("awt.toolkit"));
		System.out.println("file.encoding="+System.getProperty("file.encoding"));
		System.out.println("file.encoding.pkg="+System.getProperty("file.encoding.pkg"));
		System.out.println("file.separator="+System.getProperty("file.separator"));
		System.out.println("file.separator="+System.getProperty("file.separator"));
		System.out.println("java.awt.graphicsenv="+System.getProperty("java.awt.graphicsenv"));
		System.out.println("java.awt.printerjob="+System.getProperty("java.awt.printerjob"));
		System.out.println("java.class.path="+System.getProperty("java.class.path"));
		System.out.println("java.class.version="+System.getProperty("java.class.version"));
		System.out.println("java.endorsed.dirs="+System.getProperty("java.endorsed.dirs"));
		System.out.println("java.ext.dirs="+System.getProperty("java.ext.dirs"));
		System.out.println("java.home="+System.getProperty("java.home"));
		System.out.println("java.io.tmpdir="+System.getProperty("java.io.tmpdir"));
		System.out.println("java.library.path="+System.getProperty("java.library.path"));
		System.out.println("java.runtime.name="+System.getProperty("java.runtime.name"));
		System.out.println("java.runtime.version="+System.getProperty("java.runtime.version"));
		System.out.println("java.specification.name="+System.getProperty("java.specification.name"));
		System.out.println("java.specification.vendor="+System.getProperty("java.specification.vendor"));
		System.out.println("java.specification.version="+System.getProperty("java.specification.version"));
		System.out.println("java.vendor="+System.getProperty("java.vendor"));
		System.out.println("java.vendor="+System.getProperty("java.vendor"));
		System.out.println("java.vendor.url="+System.getProperty("java.vendor.url"));
		System.out.println("java.vendor.url="+System.getProperty("java.vendor.url"));
		System.out.println("java.vendor.url.bug="+System.getProperty("java.vendor.url.bug"));
		System.out.println("java.version="+System.getProperty("java.version"));
		System.out.println("java.version="+System.getProperty("java.version"));
		System.out.println("java.vm.info="+System.getProperty("java.vm.info"));
		System.out.println("java.vm.name="+System.getProperty("java.vm.name"));
		System.out.println("java.vm.specification.name="+System.getProperty("java.vm.specification.name"));
		System.out.println("java.vm.specification.vendor="+System.getProperty("java.vm.specification.vendor"));
		System.out.println("java.vm.specification.version="+System.getProperty("java.vm.specification.version"));
		System.out.println("java.vm.vendor="+System.getProperty("java.vm.vendor"));
		System.out.println("java.vm.version="+System.getProperty("java.vm.version"));
		System.out.println("line.separator="+System.getProperty("line.separator"));
		System.out.println("os.arch="+System.getProperty("os.arch"));
		System.out.println("os.arch="+System.getProperty("os.arch"));
		System.out.println("os.name="+System.getProperty("os.name"));
		System.out.println("os.version="+System.getProperty("os.version"));
		System.out.println("path.separator="+System.getProperty("path.separator"));
		System.out.println("path.separator="+System.getProperty("path.separator"));
		System.out.println("sun.arch.data.model="+System.getProperty("sun.arch.data.model"));
		System.out.println("sun.boot.class.path="+System.getProperty("sun.boot.class.path"));
		System.out.println("sun.boot.library.path="+System.getProperty("sun.boot.library.path"));
		System.out.println("sun.cpu.endian="+System.getProperty("sun.cpu.endian"));
		System.out.println("sun.cpu.isalist="+System.getProperty("sun.cpu.isalist"));
		System.out.println("sun.desktop="+System.getProperty("sun.desktop"));
		System.out.println("sun.io.unicode.encoding="+System.getProperty("sun.io.unicode.encoding"));
		System.out.println("sun.jnu.encoding="+System.getProperty("sun.jnu.encoding"));
		System.out.println("sun.management.compiler="+System.getProperty("sun.management.compiler"));
		System.out.println("sun.os.patch.level="+System.getProperty("sun.os.patch.level"));
		System.out.println("user.country="+System.getProperty("user.country"));
		System.out.println("user.dir="+System.getProperty("user.dir"));
		System.out.println("user.home="+System.getProperty("user.home"));
		System.out.println("user.language="+System.getProperty("user.language"));
		System.out.println("user.name="+System.getProperty("user.name"));
		System.out.println("user.timezone="+System.getProperty("user.timezone"));
		System.out.println("user.variant="+System.getProperty("user.variant"));
	}
}

O resultado do programa no meu ambiente:

awt.toolkit=sun.awt.windows.WToolkit
file.encoding=Cp1252
file.encoding.pkg=sun.io
file.separator=\
file.separator=\
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.class.path=C:\Area51\projetosEclipse\workspace\test\bin;C:\Area51\projetosEclipse\workspace\test\jai_codec.jar;C:\Area51\projetosEclipse\workspace\test\jai_core.jar
java.class.version=50.0
java.endorsed.dirs=C:\Arquivos de programas\Java\jre6\lib\endorsed
java.ext.dirs=C:\Arquivos de programas\Java\jre6\lib\ext;C:\Windows\Sun\Java\lib\ext
java.home=C:\Arquivos de programas\Java\jre6
java.io.tmpdir=C:\Users\RICARD~1\AppData\Local\Temp\
java.library.path=C:\Arquivos de programas\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\Dell\DW WLAN Card;C:\Program Files\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files\Common Files\Roxio Shared\OEM\12.0\DLLShared\;C:\Program Files\Roxio\OEM\AudioCore\;C:\Program Files\Windows Live\Shared;C:\Program Files\Common Files\Roxio Shared\DLLShared\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.6.0_23\bin;C:\apache-maven-2.2.1\bin;C:\apache-tomcat\bin;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\OpenVPNTech\bin
java.runtime.name=Java(TM) SE Runtime Environment
java.runtime.version=1.6.0_23-b05
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.6
java.vendor=Sun Microsystems Inc.
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.6.0_23
java.version=1.6.0_23
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=19.0-b09
line.separator=
os.arch=x86
os.arch=x86
os.name=Windows 7
os.version=6.1
path.separator=;
path.separator=;
sun.arch.data.model=32
sun.boot.class.path=C:\Arquivos de programas\Java\jre6\lib\resources.jar;C:\Arquivos de programas\Java\jre6\lib\rt.jar;C:\Arquivos de programas\Java\jre6\lib\sunrsasign.jar;C:\Arquivos de programas\Java\jre6\lib\jsse.jar;C:\Arquivos de programas\Java\jre6\lib\jce.jar;C:\Arquivos de programas\Java\jre6\lib\charsets.jar;C:\Arquivos de programas\Java\jre6\lib\modules\jdk.boot.jar;C:\Arquivos de programas\Java\jre6\classes
sun.boot.library.path=C:\Arquivos de programas\Java\jre6\bin
sun.cpu.endian=little
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
sun.desktop=windows
sun.io.unicode.encoding=UnicodeLittle
sun.jnu.encoding=Cp1252
sun.management.compiler=HotSpot Client Compiler
sun.os.patch.level=
user.country=BR
user.dir=C:\Area51\projetosEclipse\workspace\test
user.home=C:\Users\ricardospinoza
user.language=pt
user.name=ricardospinoza
user.timezone=
user.variant=

Referências:

Deixe um comentário

Arquivado em Java