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;

Anúncios

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