<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Boteco Digital &#187; Java</title>
	<atom:link href="http://www.botecodigital.info/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.botecodigital.info</link>
	<description></description>
	<lastBuildDate>Thu, 26 Jan 2012 18:36:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Lendo e escrevendo XML em Java com JDOM</title>
		<link>http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/</link>
		<comments>http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 18:36:46 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[arquivos]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=1976</guid>
		<description><![CDATA[JDOM é uma biblioteca que visa ser um modo simples de ler e escrever documentos XML. Vamos ver neste tutorial como criar um documento XML e como lê-lo de forma bastante simples. Primeiramente vamos as classes chaves desta biblioteca: Document: Esta classe representa o documento inteiro, esta classe pode ter apenas um elemento que seria o elemento raiz do documento(elemento root), comentários e outros elementos de definição. Element: Esta classe representa um elemento do documento XML(também chamado de nó), são [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jdom.org/">JDOM</a> é uma biblioteca que visa ser um modo simples de ler e escrever documentos XML. Vamos ver neste tutorial como criar um documento XML e como lê-lo de forma bastante simples.</p>
<p>Primeiramente vamos as classes chaves desta biblioteca:</p>
<p><strong>Document: </strong> Esta classe representa o documento inteiro, esta classe pode ter apenas um elemento que seria o elemento raiz do documento(elemento root), comentários e outros elementos de definição.</p>
<p><strong>Element: </strong> Esta classe representa um elemento do documento XML(também chamado de nó), são os elementos que compõem o documento ele pode conter outros elementos, atributos, comentários e valores.</p>
<p><strong>Attribute: </strong> Esta classe representa um atributo de um elemento XML.</p>
<p>Vamos ao código então! <b>Só não esqueça de <a href="http://www.jdom.org/downloads/index.html">baixar a biblioteca JDOM</a> e incluí-la no seu CLASSPATH.<b> </p>
<pre class="brush: java; title: ; notranslate">
Document doc = new Document();

Element root = new Element(&quot;turma&quot;);

Element pessoa = new Element(&quot;pessoa&quot;);
Attribute sexo = new Attribute(&quot;sexo&quot;,&quot;Masculino&quot;);
pessoa.setAttribute(sexo);

Element nome = new Element(&quot;nome&quot;);
nome.setText(&quot;Rodrigo&quot;);
pessoa.addContent(nome);

Element sobrenome = new Element(&quot;sobrenome&quot;);
sobrenome.setText(&quot;sobrenome&quot;);
pessoa.addContent(sobrenome);

Element notas = new Element(&quot;notas&quot;);
pessoa.addContent(notas);

Element teste1 = new Element(&quot;teste1&quot;);
teste1.setText(&quot;8.3&quot;);
Element teste2 = new Element(&quot;teste2&quot;);
teste2.setText(&quot;7.8&quot;);
Element prova = new Element(&quot;prova&quot;);
prova.setText(&quot;9.2&quot;);

notas.addContent(teste1);
notas.addContent(teste2);
notas.addContent(prova);

root.addContent(pessoa);

doc.setRootElement(root);

XMLOutputter xout = new XMLOutputter();
xout.output(doc , System.out);
</pre>
<p>Na linha 1 é criado o objeto que representa o documento XML, na linha 3 é criado o elemento raiz do documento e é passado para o construtor o nome do elemento, neste caso &#8220;turma&#8221;, é dentro deste elemento que iremos inserir cada elemento XML que irá representar uma pessoa, assim, dentro do elemento &#8220;turma&#8221; pode haver um ou vários elementos &#8220;pessoa&#8221;.</p>
<p>Na linha 5 é criado um elemento &#8220;pessoa&#8221; e nele será inserido as informações sobre a pessoa, como o sexo que será inserido  como um atributo do elemento pessoa e para isso é criado um objeto de atributo na linha 6 e passado para o construtor como parâmetros o nome do atributo e seu valor. Na linha 7 é adicionado o atributo ao elemento &#8220;pessoa&#8221;.</p>
<p>Na linha 9 é criado um elemento nome, é definido um valor para ele na linha 10 e adicionamos este elemento &#8220;nome&#8221; ao elemento &#8220;pessoa&#8221; utilizando  o método <em>addContent</em>, é importante lembrar a diferença deste método com o <em>setContent</em>, o método <em>addContent</em> adiciona o elemento passado por parâmetro ao conteúdo já existente dentro do elemento pai e o método <em>setContent</em> irá substituir o conteúdo anterior do elemento pai se houver.</p>
<p>Nas linhas 13, 14 e 15 é criado e atribuído o elemento de &#8220;sobrenome&#8221; da pessoa.</p>
<p>Na linha 17 é criado um elemento &#8220;notas&#8221; que irá conter outros elementos, que serão as notas da pessoa.</p>
<p>Da linha 20 até 25 é criado três elementos(&#8220;teste1&#8243;,&#8221;teste2&#8243; e &#8220;prova&#8221;) e atribuído valores para eles. Nas linhas 27, 28 e 29 é inserido os elementos &#8220;teste1&#8243;, &#8220;teste2&#8243; e &#8220;prova&#8221;, dentro do elemento &#8220;notas&#8221;.</p>
<p>Na linha 31 adicionamos o elemento &#8220;pessoa&#8221; ao elemento raiz do documento(elemento &#8220;turma&#8221;)  e na linha 33 é adicionado o  elemento turma como elemento root do documento através do método <em> setRootElement</em>.</p>
<p>Na linha 35 é criado um objeto <em>XMLOutputter</em> que é responsável por gerar o XML através do método <em>output</em> que  recebe como parâmetro o objeto do documento a ser escrito e um <em>OutputStream</em> onde será enviado o XML, que no caso foi utilizado a saida padrão. Também poderia criar um outro <em>OutputStream</em> para um arquivo como no exemplo abaixo:</p>
<pre class="brush: java; title: ; notranslate">
XMLOutputter xout = new XMLOutputter();
OutputStream out = new FileOutputStream( new File(&quot;exemplo.xml&quot;));
xout.output(doc , out);
</pre>
<p>A saida do exemplo será a seguinte:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;turma&gt;
	&lt;pessoa sexo=&quot;Masculino&quot;&gt;
		&lt;nome&gt;Rodrigo&lt;/nome&gt;
		&lt;sobrenome&gt;sobrenome&lt;/sobrenome&gt;
		&lt;notas&gt;
			&lt;teste1&gt;8.3&lt;/teste1&gt;
			&lt;teste2&gt;7.8&lt;/teste2&gt;
			&lt;prova&gt;9.2&lt;/prova&gt;
		&lt;/notas&gt;
	&lt;/pessoa&gt;
&lt;/turma&gt;
</pre>
<p>Utilizando a mesma estrutura de documento XML veremos um exemplo de leitura:</p>
<pre class="brush: java; title: ; notranslate">
File f = new File(&quot;exemplo.xml&quot;);

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(f);

Element root = (Element) doc.getRootElement();

List pessoas = root.getChildren();

Iterator i = pessoas.iterator();

while( i.hasNext() ){
		Element pessoa = (Element) i.next();
		System.out.println(&quot;Nome: &quot; + pessoa.getChildText(&quot;nome&quot;));
		System.out.println(&quot;Sobrenome: &quot; + pessoa.getChildText(&quot;sobrenome&quot;));
		System.out.println(&quot;Sexo: &quot; + pessoa.getAttributeValue(&quot;sexo&quot;));
		System.out.println(&quot;Nota( teste1 ): &quot;+pessoa.getChild(&quot;notas&quot;).getChildText(&quot;teste1&quot;));
		System.out.println(&quot;Nota( teste2 ): &quot;+pessoa.getChild(&quot;notas&quot;).getChildText(&quot;teste2&quot;));
		System.out.println(&quot;Nota( prova ): &quot;+pessoa.getChild(&quot;notas&quot;).getChildText(&quot;prova&quot;));
		System.out.println();
}
</pre>
<p>Na linha 1 é criado um objeto representando o arquivo XML a ser lido, na linha 3 é criado o objeto <em>SAXBuilder</em> que é responsável por converter o arquivo em um objeto do tipo <em>Document</em> da biblioteca JDOM.</p>
<p>Na linha 5 é construído o objeto <em>Document</em> através do método <em>builder</em> do <em>SAXBuilder</em>.</p>
<p>Na linha 7 é pego o elemento raiz do documento(elemento &#8220;turma&#8221;) utilizando o método <em>getRootElement</em>. Utilizando este objeto é chamado o método <em>getChildren</em>(linha 9) que retorna um objeto <em>List</em> com todos os elementos filhos, que no caso serão objetos pessoa.</p>
<p>Na linha 11 é definido um iterador para percorrer os elementos &#8220;pessoas&#8221; da lista. </p>
<p>Na linha 14 é utilizado a variável pessoa para armazenar cada objeto pessoa.</p>
<p>Na Linha 15 é utilizado o método <em>getChildText</em> do elemento &#8220;pessoa&#8221; que retorna o valor do elemento filho selecionado, no caso o elemento nome.</p>
<p>Na linha 17 é utilizado po método <em>getAttributeValue</em> que retorna o valor do atributo selecionado, no caso sexo.</p>
<p>Na linha 18 para pegar o valor do elemento &#8220;teste1&#8243; é necessário primeiro selecionar o elemento &#8220;notas&#8221; já que o elemento &#8220;teste1&#8243; se encontra dentro deste, para isso é utilizado o método <em>getChild</em> para somente depois utilizar o método  <em>getChildText</em> para pegar o valor de &#8220;teste1&#8243;.</p>
<p>Como vimos é uma biblioteca bem simples de utilizar e quem já lidou um pouco com XML não deve ter nenhuma dificuldade.</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/10/java.png" class="crp_thumb wp-post-image" alt="Conectando Java com MongoDB" title="Conectando Java com MongoDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark" class="crp_title">Conectando Java com MongoDB</a></li><li><a href="http://www.botecodigital.info/jquery/menu-sanfona-com-jquery/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Menu Sanfona com JQuery" title="Menu Sanfona com JQuery" /></a> <a href="http://www.botecodigital.info/jquery/menu-sanfona-com-jquery/" rel="bookmark" class="crp_title">Menu Sanfona com JQuery</a></li><li><a href="http://www.botecodigital.info/php/criando-um-feed-com-simplexml/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/04/php.png" class="crp_thumb wp-post-image" alt="Criando um FEED com SimpleXML" title="Criando um FEED com SimpleXML" /></a> <a href="http://www.botecodigital.info/php/criando-um-feed-com-simplexml/" rel="bookmark" class="crp_title">Criando um FEED com SimpleXML</a></li><li><a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Trocando dados utilizando JSON" title="Trocando dados utilizando JSON" /></a> <a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark" class="crp_title">Trocando dados utilizando JSON</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conectando Java com MongoDB</title>
		<link>http://www.botecodigital.info/java/conectando-java-com-mongodb/</link>
		<comments>http://www.botecodigital.info/java/conectando-java-com-mongodb/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 03:12:24 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[BD]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[dados]]></category>
		<category><![CDATA[db]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=1606</guid>
		<description><![CDATA[Vimos em um post passado o MongoDB e agora vamos ver como conectamos a ele em Java. Antes de qualquer coisa temos de baixar o driver e para isso basta baixá-lo da área de drivers do site do MongoDB e adicioná-lo ao seu classpath. Conectar ao MongoDB é bastante simples, basta instanciar a classe Mongo e depois selecionar o banco. Acredito que a parte mais complicada é transformar um documento no estilo JSON em um objeto BasicDBObject que a maioria [...]]]></description>
			<content:encoded><![CDATA[<p>Vimos em um <a href="http://www.botecodigital.info/bd-2/nosql-mongodb/">post passado o MongoDB</a> e agora vamos ver como conectamos a ele em Java.</p>
<p>Antes de qualquer coisa temos de baixar o driver e para isso basta baixá-lo da <a href="http://www.mongodb.org/display/DOCS/Java+Language+Center">área de drivers do site do MongoDB</a> e adicioná-lo ao seu classpath.</p>
<p>Conectar ao MongoDB é bastante simples, basta instanciar a classe Mongo e depois selecionar o banco.</p>
<pre class="brush: java; title: ; notranslate">
Mongo m = new Mongo();
// ou
Mongo m = new Mongo( &quot;localhost&quot; );
// ou
Mongo m = new Mongo( &quot;localhost&quot; , 27017 );

DB db = m.getDB( &quot;meu_banco&quot; );
</pre>
<p>Acredito que a parte mais complicada é transformar um documento no estilo JSON em um objeto <strong>BasicDBObject</strong> que a maioria dos métodos da API recebe. Vamos fazer um exemplo:</p>
<pre class="brush: jscript; title: ; notranslate">
{
	nome : &quot;Rodrigo&quot;,
	sobrenome : &quot;Aramburu&quot;,
	telefone : &quot;1234-5678&quot;,
	endereco : {
				rua : &quot;Rua Fulano&quot;,
				numero : &quot;221B&quot;,
				bairro : &quot;Centro&quot;
			}
}
</pre>
<p>Convertendo este objeto JSON para objeto Java ficaria assim:</p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject pessoa = new BasicDBObject();
pessoa.put(&quot;nome&quot;, &quot;Rodrigo&quot;);
pessoa.put(&quot;sobrenome&quot;, &quot;Aramburu&quot;);
pessoa.put(&quot;telefone&quot;, &quot;1234-5678&quot;);

BasicDBObject end = new BasicDBObject();
end.put(&quot;rua&quot;, &quot;Rua Fulano&quot;);
end.put(&quot;numero&quot;,&quot;221B&quot;);
end.put(&quot;bairro&quot;, &quot;Centro&quot;);

pessoa.put(&quot;endereco&quot;, end);
</pre>
<p>Na linha 1 criamos um objeto <strong>BasicDBObject</strong>, na linhas 2 , 3 e 4 adicionamos os campos nome, sobrenome e telefone e seus valores. O campo endereco é um campo que o valor é um objeto incorporado então antes de adicionarmos ele devemos criar este objeto(linha 6) e incluir seus campos(linhas 7, 8 e 9). Com o objeto endereco podemos inserir no campo endereco do objeto pessoa.</p>
<p>Se você se perguntou e se tivesse vários telefones? Simples!</p>
<pre class="brush: java; title: ; notranslate">
String[] tels = { &quot;1234-5678&quot;,&quot;9898-9898&quot; };
pessoa.put(&quot;telefone&quot;, tels);
</pre>
<p>Com o Objeto criado, inserir no MongoDB é muito simples :</p>
<pre class="brush: java; title: ; notranslate">
DBCollection colecaoPessoas = db.getCollection(&quot;pessoas&quot;);
colecaoPessoas.insert(pessoa);
</pre>
<p>Bom depois de inserir sempre é bom buscar então vamos lá:</p>
<pre class="brush: java; title: ; notranslate">
DBCursor cursor = coll.find();
while( cursor.hasNext() ){
        BasicDBObject pessoa = (BasicDBObject) cursor.next();
        System.out.println( &quot;Nome: &quot;+pessoa.getString(&quot;nome&quot;) );
        System.out.println(&quot;Sobrenome: &quot;+pessoa.getString(&quot;sobrenome&quot;) );
        System.out.println(&quot;Telefone: &quot;+pessoa.getString(&quot;telefone&quot;) );

        BasicDBObject end = (BasicDBObject) pessoa.get(&quot;endereco&quot;);
        System.out.println( &quot;Rua: &quot;+end.getString(&quot;rua&quot;) );
        System.out.println( &quot;Numero: &quot;+end.getString(&quot;numero&quot;) );
        System.out.println( &quot;Bairro: &quot;+end.getString(&quot;bairro&quot;) );
        System.out.println( &quot;======================================&quot; );

}
</pre>
<p>Para fazer uma consulta se utiliza o método <strong>find</strong> que retorna um <strong>DBCursor</strong> que permite iterar sobre o resultado, os métodos mais importantes são <strong>hasNext()</strong> que retorna true se tiver o próximo documento e falso se não tiver mais. E o método <strong>next()</strong> que retorna o próximo <strong>DBObjetc</strong> do qual utilizamos o método <strong>getString(“nome_campo&#8221;)</strong> ou <strong>getInteger(“nome_campo&#8221;)</strong> ,  <strong>getBoolean(“nome_campo&#8221;)</strong>, <strong>getDouble(“nome_campo&#8221;)</strong> para pegar os dados.</p>
<p>E como colocamos alguns critério de busca?</p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject query = new BasicDBObject();
query.put(&quot;telefone&quot;,&quot;9898-9898&quot;);

DBCursor cursor = coll.find(query);
</pre>
<p>Para filtrar basta passar por parâmetro um objeto <strong>BasicDBObject</strong> para o método <strong>find()</strong> e podemos utilizar todos os tipos de filtros, <strong>“$in&#8221;</strong>, <strong>“$lte&#8221;</strong>, <strong>“$gt&#8221;</strong>, <strong>“$or&#8221;</strong>, <strong>“$regex&#8221;</strong>, etc&#8230;</p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject query = new BasicDBObject();

query.put(&quot;idade&quot;, new BasicDBObject().append(&quot;$gt&quot;, 18));

DBCursor cursor = coll.find(query);
</pre>
<p>O interessante no filtro $in é que podemos utilizar uma coleção:</p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject query = new BasicDBObject();
List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();
list.add(9);
list.add(10);
query.put(&quot;idade&quot;, new BasicDBObject().append(&quot;$in&quot;, list));
</pre>
<p>Bom agora vamos deletar</p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject obj = new BasicDBObject();
obj.put(&quot;_id&quot;, new ObjectId( &quot;4e827ca3d6340373c65e4e99&quot; )  );
colecaoPessoas.remove(obj);
</pre>
<p>Normalmente eu prefiro deletar pelo _id e o valor deste campo é um objeto do tipo <strong>ObjectId(“id&#8221;)</strong>, criar um objeto <strong>BasicDBObject</strong> para depois  passá-lo de parâmetro para o método <strong>remove()</strong>.</p>
<p>Só falta atualizar </p>
<pre class="brush: java; title: ; notranslate">
BasicDBObject ant = new BasicDBObject();
ant.put(&quot;_id&quot;, new ObjectId( &quot;4e8279f7d63465f846d5cea9&quot; )  );
BasicDBObject novo =  new BasicDBObject();
novo.put(&quot;$set&quot;,  new BasicDBObject().append(&quot;idade&quot;, 16));

colecaoPessoas.update(ant, novo);
</pre>
<p>Bom era isso, até mais e obrigado pelos peixes!!!</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/bd-2/nosql-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/09/Icon_MongoDB_by_xkneo.png" class="crp_thumb wp-post-image" alt="NoSQL: MongoDB" title="NoSQL: MongoDB" /></a> <a href="http://www.botecodigital.info/bd-2/nosql-mongodb/" rel="bookmark" class="crp_title">NoSQL: MongoDB</a></li><li><a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2012/01/java-duke-xml1.png" class="crp_thumb wp-post-image" alt="Lendo e escrevendo XML em Java com JDOM" title="Lendo e escrevendo XML em Java com JDOM" /></a> <a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark" class="crp_title">Lendo e escrevendo XML em Java com JDOM</a></li><li><a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Trocando dados utilizando JSON" title="Trocando dados utilizando JSON" /></a> <a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark" class="crp_title">Trocando dados utilizando JSON</a></li><li><a href="http://www.botecodigital.info/java/dojo-senac/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/07/dojo_sp-300x263-150x150.png" class="crp_thumb wp-post-image" alt="Dojo SENAC-Uruguaiana" title="Dojo SENAC-Uruguaiana" /></a> <a href="http://www.botecodigital.info/java/dojo-senac/" rel="bookmark" class="crp_title">Dojo SENAC-Uruguaiana</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/conectando-java-com-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo SENAC-Uruguaiana</title>
		<link>http://www.botecodigital.info/java/dojo-senac/</link>
		<comments>http://www.botecodigital.info/java/dojo-senac/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 21:13:09 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=1558</guid>
		<description><![CDATA[Depois de muito tempo esperando, saiu o Coding Dojo da turma de Desenvolvimento de Aplicações. Como foi a primeira experiencia de Dojo do pessoal demorou um pouco para engrenarem mas na minha opinião foi bem legal, deu para entender o básico sobre TDD. Foi utilizada a linguagem Java já que é a que utilizamos no componente de Desenvolvimento. O Problema foi o clássico janken-pon(Pedra Papel e tesoura) ou como chamamos &#8220;JokenPO&#8221; (pura preguiça de buscar o nome certo). Vamos então [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de muito tempo esperando, saiu o <a href="http://apoie.org/Dojo.html">Coding Dojo</a> da turma de Desenvolvimento de Aplicações. Como foi a primeira experiencia de Dojo do pessoal demorou um pouco para engrenarem mas na minha opinião foi bem legal, deu para entender o básico sobre <a href="http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/">TDD</a>.</p>
<p>Foi utilizada a linguagem Java já que é a que utilizamos no componente de Desenvolvimento.</p>
<p>O Problema foi o clássico  janken-pon(Pedra Papel e tesoura) ou como chamamos &#8220;JokenPO&#8221; (pura preguiça de buscar o nome certo).</p>
<p>Vamos então para a retrospectiva;</p>
<h3>PRÓS </h3>
<p>trabalho em equipe<br />
todo mundo participou<br />
aula sem piadas idiotas(quase)</p>
<h3>CONTRAS</h3>
<p>o projetor<br />
a mancha do projetor</p>
<p>Para complementar segue o código produzido</p>
<pre class="brush: java; title: ; notranslate">
public class TesteJokenPO {

        JokenPO joken = new JokenPO();

     @Test
     public void quandoPedraPapel() {
         String retorno = joken.vencedor(&quot;pedra&quot;, &quot;papel&quot;);
         assertEquals(&quot;papel&quot;, retorno);
     }

     @Test
     public void quandoPedraTesoura() {
         String retorno = joken.vencedor(&quot;pedra&quot;, &quot;tesoura&quot;);
         assertEquals(&quot;pedra&quot;, retorno);
     }

     @Test
     public void quandoPapelTesoura() {
         String retorno = joken.vencedor(&quot;papel&quot;, &quot;tesoura&quot;);
         assertEquals(&quot;tesoura&quot;, retorno);
     } 

     @Test
     public void quandoTesouraPedra(){
         String retorno = joken.vencedor(&quot;tesoura&quot;, &quot;pedra&quot;);
         assertEquals(&quot;pedra&quot;, retorno);
     }

     @Test
     public void quandoTesouraPapel() {
         String retorno = joken.vencedor(&quot;tesoura&quot;, &quot;papel&quot;);
         assertEquals(&quot;tesoura&quot;, retorno);
     }
     @Test
     public void quandoPapelPedra() {
         String retorno = joken.vencedor(&quot;papel&quot;, &quot;pedra&quot;);
         assertEquals(&quot;papel&quot;, retorno);
     }
}
</pre>
<pre class="brush: java; title: ; notranslate">
public class JokenPO {

    public String vencedor(String j1,String j2){

        if (((j1 == &quot;pedra&quot;)&amp;&amp;(j2 == &quot;papel&quot;))||
            ((j1 == &quot;papel&quot;)&amp;&amp;(j2 == &quot;pedra&quot; )))
               return &quot;papel&quot;;  

        if(((j1 == &quot;tesoura&quot;)&amp;&amp;(j2 == &quot;pedra&quot;))||
           ((j1 == &quot;pedra&quot;) &amp;&amp; (j2==&quot;tesoura&quot;)) )
               return &quot;pedra&quot;;  

        if(((j1 == &quot;tesoura&quot;)&amp;&amp;( j2== &quot;papel&quot;))||
           ((j1 == &quot;papel&quot;)&amp;&amp;( j2== &quot;tesoura&quot;)))
              return &quot;tesoura&quot;;        

              return &quot;&quot;;

    }
}
</pre>
<div style="text-align:center">
<a rel="prettyPhoto" href="http://www.botecodigital.info/wp-content/uploads/2011/07/2011-07-19-21.46.14.jpg" class="cboxModal" title="dojo1"><img src="http://www.botecodigital.info/wp-content/uploads/2011/07/2011-07-19-21.46.14-300x180.jpg" alt="" title="dojo1" width="300" height="180" class="aligncenter size-medium wp-image-1560" /></a>
</div>
<div style="text-align:center">
<a rel="prettyPhoto" href="http://www.botecodigital.info/wp-content/uploads/2011/07/2011-07-19-21.46.46.jpg" class="cboxModal" title="SAMSUNG"><img src="http://www.botecodigital.info/wp-content/uploads/2011/07/2011-07-19-21.46.46-300x180.jpg" alt="" title="SAMSUNG" width="300" height="180" class="aligncenter size-medium wp-image-1561" /></a>
</div>
<p>Bom pessoal espero que esse o primeiro de muitos. Andei vendo que um pessoal esta fazendo <a href="http://dojorio.wordpress.com/2011/06/27/dojo-online/">Dojo Online</a> quem sabe dá para fazer algo assim.</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/12/java2.png" class="crp_thumb wp-post-image" alt="Código espartano" title="Código espartano" /></a> <a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark" class="crp_title">Código espartano</a></li><li><a href="http://www.botecodigital.info/css/zen-coding-uma-manira-diferente-de-escrever-html/" rel="bookmark"><img width="48" height="48" src="http://www.botecodigital.info/wp-content/uploads/2010/10/zen-coding-logo.png" class="crp_thumb wp-post-image" alt="Zen-Coding, uma maneira diferente de escrever HTML" title="Zen-Coding, uma maneira diferente de escrever HTML" /></a> <a href="http://www.botecodigital.info/css/zen-coding-uma-manira-diferente-de-escrever-html/" rel="bookmark" class="crp_title">Zen-Coding, uma maneira diferente de escrever HTML</a></li><li><a href="http://www.botecodigital.info/css/font-face-utilizando-fontes-alem-do-basico/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/11/css3.jpg" class="crp_thumb wp-post-image" alt="Font-Face, utilizando fontes além do básico!" title="Font-Face, utilizando fontes além do básico!" /></a> <a href="http://www.botecodigital.info/css/font-face-utilizando-fontes-alem-do-basico/" rel="bookmark" class="crp_title">Font-Face, utilizando fontes além do básico!</a></li><li><a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Trocando dados utilizando JSON" title="Trocando dados utilizando JSON" /></a> <a href="http://www.botecodigital.info/jquery/trocando-dados-utilizando-json/" rel="bookmark" class="crp_title">Trocando dados utilizando JSON</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/dojo-senac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo Java</title>
		<link>http://www.botecodigital.info/java/video-java/</link>
		<comments>http://www.botecodigital.info/java/video-java/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 12:34:43 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vídeo]]></category>
		<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=1283</guid>
		<description><![CDATA[Java o Filme!!! from charlesmessias on Vimeo. Eu sei que é meio antigo mas só hoje que fui achar um com legenda Posts Relacionados: Zen-Coding, uma maneira diferente de escrever HTML Os segredos da próxima geração de vídeo games O Passado e o Futuro se encontram TV Digital revoluciona maneira de assistir televisão]]></description>
			<content:encoded><![CDATA[<div style="text-align:center"><iframe src="http://player.vimeo.com/video/15445712" width="400" height="225" frameborder="0"></iframe>
<p><a href="http://vimeo.com/15445712">Java o Filme!!!</a> from <a href="http://vimeo.com/user4486043">charlesmessias</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
</div>
<p>Eu sei que é meio antigo mas só hoje que fui achar um com legenda <img src='http://www.botecodigital.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/css/zen-coding-uma-manira-diferente-de-escrever-html/" rel="bookmark"><img width="48" height="48" src="http://www.botecodigital.info/wp-content/uploads/2010/10/zen-coding-logo.png" class="crp_thumb wp-post-image" alt="Zen-Coding, uma maneira diferente de escrever HTML" title="Zen-Coding, uma maneira diferente de escrever HTML" /></a> <a href="http://www.botecodigital.info/css/zen-coding-uma-manira-diferente-de-escrever-html/" rel="bookmark" class="crp_title">Zen-Coding, uma maneira diferente de escrever HTML</a></li><li><a href="http://www.botecodigital.info/noticias/os-segredos-da-proxima-geracao-de-video-games/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/10/video.png" class="crp_thumb wp-post-image" alt="Os segredos da próxima geração de vídeo games" title="Os segredos da próxima geração de vídeo games" /></a> <a href="http://www.botecodigital.info/noticias/os-segredos-da-proxima-geracao-de-video-games/" rel="bookmark" class="crp_title">Os segredos da próxima geração de vídeo games</a></li><li><a href="http://www.botecodigital.info/noticias/o-passado-e-o-futuro-se-encontram/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/07/noticia2.png" class="crp_thumb wp-post-image" alt="O Passado e o Futuro se encontram" title="O Passado e o Futuro se encontram" /></a> <a href="http://www.botecodigital.info/noticias/o-passado-e-o-futuro-se-encontram/" rel="bookmark" class="crp_title">O Passado e o Futuro se encontram</a></li><li><a href="http://www.botecodigital.info/noticias/tv-digital-revoluciona-maneira-de-assistir-televisao/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/07/noticia2.png" class="crp_thumb wp-post-image" alt="TV Digital revoluciona maneira de assistir televisão" title="TV Digital revoluciona maneira de assistir televisão" /></a> <a href="http://www.botecodigital.info/noticias/tv-digital-revoluciona-maneira-de-assistir-televisao/" rel="bookmark" class="crp_title">TV Digital revoluciona maneira de assistir televisão</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/video-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validando dados com expressões regulares em Java</title>
		<link>http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/</link>
		<comments>http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 11:00:31 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[expressoes regulares]]></category>
		<category><![CDATA[validar dados]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=1140</guid>
		<description><![CDATA[O que é validar dados? Podemos dizer que validar dados é verificar se os dados informados pelos usuários( insira aqui seu apelido carinhoso ) estão em um formato que não irá danificar nosso programa,ou seja, que os dados informados terão a forma e os valores desejados( acredite o usuário vai digitar letras em um campo numérico). Como você pode ver no titulo deste post vamos utilizar expressões regulares para validar nossos dados, mas que diabos é uma expressão regular? Simplificando [...]]]></description>
			<content:encoded><![CDATA[<p>O que é validar dados? Podemos dizer que validar dados é verificar se os dados informados pelos usuários( insira aqui seu apelido carinhoso ) estão em um formato que não irá danificar nosso programa,ou seja,  que os dados informados terão a forma e os valores desejados( acredite o usuário vai digitar letras em um campo numérico).</p>
<p>Como você pode ver no titulo deste post vamos utilizar expressões regulares para validar nossos dados, mas que diabos é uma expressão regular? Simplificando uma expressão regular é uma série de caracteres capaz de descrever outras séries de caracteres. Complicado? Um pouco no inicio talvez, mas vamos com calma analisando um exemplo simples, um telefone por exemplo</p>
<pre class="brush: plain; title: ; notranslate">
3412-1234
</pre>
<p>Como podemos ver este dado é composto somente de caracteres numéricos e é formatado com quatro caracteres numéricos, um caractere “-” e mais quatro caracteres numéricos. Vejamos como ficaria a expressão regular que expressaria essa regra:</p>
<pre class="brush: plain; title: ; notranslate">
\d{4,4}-\d{4,4}
</pre>
<p>Esta expressão poderia descrever diversos telefones que seguirem esta regra de formatação, por exemplo os telefones abaixo:</p>
<pre class="brush: plain; title: ; notranslate">
3414-4974
9698-1101
3412-1234
</pre>
<p>e não encontraria os seguintes.</p>
<pre class="brush: plain; title: ; notranslate">
12902398
13244-54452
asdf-hjkl
</pre>
<p>Então vamos destrinchar a expressão </p>
<p><strong>\d</strong>: É um meta caractere do tipo representante, que no caso representa um caractere numérico, ou  seja de 0-9<br />
<strong>{4,4}</strong>: É um quantificador ele representa quantas vezes o caractere anterior pode ser repetido, no caso no minimo quatro e no máximo quatro.<br />
<strong>-</strong> : o caractere “-” mesmo!</p>
<h5>Meta caractere, quantificador? </h5>
<p>Calma não criemos pânico! Um representante é um caractere que representa uma série de outros caracteres. </p>
<h6>Meta caracteres</h6>
<p><strong>\d</strong>: Um dígito<br />
<strong>\s</strong>: Um caractere de espaço em branco<br />
<strong>\w</strong>: Um caractere de palavra(letras, dígitos ou “_”)<br />
<strong>.</strong> : Qualquer caractere</p>
<p>Um aviso importante é que para utilizá-los em uma aplicação dentro de uma <em>String</em> devemos escapar as barras com mais uma barra. Então para validar um número inteiro devemos utilizar a seguinte expressão:</p>
<pre class="brush: plain; title: ; notranslate">
&quot;\\d&quot;
</pre>
<p>Se nos interessar pesquisar por um grupo limitado de caracteres podemos especificar uma lista através de colchetes. Por exemplo a lista <em>[abc]</em> irá somente encontrar os caracteres “a”, “b” ou “c”</p>
<p><strong>“[bcf]aixa”</strong>  irá encontrar as seguintes palavras “baixa”, “caixa” e “faixa”</p>
<p><strong>“Texto[1234]”</strong> irá encontrar as seguintes palavras “Texto1”, “Texto2”, “Texto3”</p>
<p>Também podemos especificar um intervalo de valores utilizando um hífen dentro do colchete.</p>
<p><strong>“[a-z]teste”</strong> irá encontrar as seguintes palavras “ateste”, “dteste”, ”oteste”, “pteste”</p>
<p>Bom  até agora vimos como encontrar um caractere, mas se quisermos que este caractere pudesse ser repetido inúmeras vezes? Utilizaríamos um quantificador, que é um caractere que informa quantas vezes um meta caractere pode/deve ser repetido.</p>
<h6>Quanificadores</h6>
<p><strong>?</strong>: Pode se repetir 0 ou 1  vez<br />
<strong>*</strong>: Pode se repetir uma ou várias vezes<br />
<strong>+</strong>: Pode se repetir uma ou várias vezes<br />
{n,m}: Pode se repetir de n até m vezes</p>
<p>Agora podemos criar algumas expressões um pouco mais rebuscadas, como uma para validar placas de carros:</p>
<pre class="brush: plain; title: ; notranslate">
“[a-zA-Z]{3,3}-\\d{4,4}”
</pre>
<p>Vamos analisar a expressão, temos entre colchetes duas listas que informam que só será aceito caractere de &#8220;a&#8221; até &#8220;z&#8221; tanto maiúsculo como minusculo que podem ser repetido no minimo 3 vezes e no máximo 3 vezes. Seguido deve possuir um traço e após um caractere numérico que pode se repetir no minimo 4 vezes e no máximo 4 vezes.</p>
<p>Agora vamos ao código Java para validar:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidaPlaca {

    public static void main(String args[]){
        Pattern pattern = Pattern.compile(&quot;[a-zA-Z]{3,3}-\\d{4,4}&quot;);
        Matcher matcher = pattern.matcher(&quot;ETE-1234&quot;);

        if( matcher.find() ){
            System.out.println(&quot;Encontrou&quot;);
        }else{
            System.out.println(&quot;Não encontrou&quot;);
        }
    }
}
</pre>
<p>Na linha 8 criamos um objeto <em>Pattern</em> que é responsável por armazenar uma expressão regular que será utilizado pelo objeto <em>Matcher</em> que é responsável pelas buscar. </p>
<p>O método <em>find()</em>(linha 11) retorna <em>true</em> se encontrar o padrão de caracteres especificado pelas expressões regulares na <em>String</em> passada na linha 12.</p>
<p>O objeto <em>Matcher</em> pode buscar várias ocorrências do padrão em sua <em>String</em> possuindo métodos para retornar estas ocorrências e e suas posições. Veja o exemplo abaixo:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidaPlaca {

    public static void main(String args[]){
        Pattern pattern = Pattern.compile(&quot;[a-zA-Z]{3,3}-\\d{4,4}&quot;);
        Matcher matcher = pattern.matcher(&quot;ETE-1234 ZXC-4567 cdr-0987&quot;);

        boolean b = false;
        while( b = matcher.find() ){
            if( b ){
                System.out.println( matcher.group()+&quot; - Posição: &quot;+matcher.start() );
            }else{
                System.out.println(&quot;Não encontrou&quot;);
            }
        }
    }
}
</pre>
<p>Você pode fazer mais uns teste com outras expressões como:</p>
<h6>CEP</h6>
<pre class="brush: plain; title: ; notranslate">
&quot;^\\d{5,5}-?\\d{3,3}$&quot;
</pre>
<p></p>
<h6>E-mail(não está 100% mas dá para ter uma idéia)</h6>
<pre class="brush: plain; title: ; notranslate">
&quot;^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9]\\.)*([a-zA-Z0-9])*\\.&quot;
</pre>
<p>Uma ótima referência para aprender mais é através do <a href="http://guia-er.sourceforge.net/index.html">Expressões Regulares &#8211; Guia de Consulta Rápida por Aurélio Marinho Jargas </a></p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/10/java.png" class="crp_thumb wp-post-image" alt="Conectando Java com MongoDB" title="Conectando Java com MongoDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark" class="crp_title">Conectando Java com MongoDB</a></li><li><a href="http://www.botecodigital.info/jquery/validando-formularios-com-jquery-plugin-validation/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Validando formulários com JQuery-Plugin-Validation" title="Validando formulários com JQuery-Plugin-Validation" /></a> <a href="http://www.botecodigital.info/jquery/validando-formularios-com-jquery-plugin-validation/" rel="bookmark" class="crp_title">Validando formulários com JQuery-Plugin-Validation</a></li><li><a href="http://www.botecodigital.info/java/manipulando-datas-em-java/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/04/java.png" class="crp_thumb wp-post-image" alt="Manipulando datas em Java" title="Manipulando datas em Java" /></a> <a href="http://www.botecodigital.info/java/manipulando-datas-em-java/" rel="bookmark" class="crp_title">Manipulando datas em Java</a></li><li><a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/12/java2.png" class="crp_thumb wp-post-image" alt="Código espartano" title="Código espartano" /></a> <a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark" class="crp_title">Código espartano</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Manipulando datas em Java</title>
		<link>http://www.botecodigital.info/java/manipulando-datas-em-java/</link>
		<comments>http://www.botecodigital.info/java/manipulando-datas-em-java/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 19:59:39 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[datas]]></category>
		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=959</guid>
		<description><![CDATA[Para quem está começando, trabalhar com datas em Java pode ser um pouco complicado, já que a classe Date não fornece todos os recursos necessários. Para completá-la é também utilizada a classe Calendar, que é uma classe abstrata que permite a manipulação de datas de forma mais fácil. Date(java.util.Date) A classe Date armazena uma data e hora, que internamente é armazenada com um inteiro long que é o numero de milissegundos que se passou desde 01/01/1970. Esta classe é bem [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem está começando, trabalhar com datas em Java pode ser um pouco complicado, já que a classe <strong>Date</strong> não fornece todos os recursos necessários. Para completá-la é também utilizada a classe <strong>Calendar</strong>, que é uma classe abstrata que permite a manipulação de datas de forma mais fácil.</p>
<h3>Date(java.util.Date)</h3>
<p>A classe <strong>Date</strong> armazena uma data e hora, que internamente é armazenada com um inteiro long que é o numero de milissegundos que se passou desde 01/01/1970. </p>
<p>Esta classe é bem simples de se trabalhar, mas muitos de seus métodos foram depreciados por não trabalhar muito bem com internacionalização e etc.  </p>
<p>Para obter a data atual se basta criar um objeto <strong>Date</strong> sem nenhum parâmetro.</p>
<pre class="brush: java; title: ; notranslate">
Date d = new Date();
</pre>
<h3>Calendar(java.util.Calendar)</h3>
<p>A classe <strong>Calendar</strong> sendo uma classe abstrata não pode ser instanciada com o operador new, ela deve ser criada utilizando um operador estático sobrecarregado <strong>getInstance()</strong>. Na maioria das vezes você vai receber uma instância de Java.util.GregorianCalendar.</p>
<pre class="brush: java; title: ; notranslate">
Calendar c = Calendar.getIntance();
</pre>
<p>Com a instância de <strong>Calendar</strong> devemos configurar uma data e podemos fazer isso de duas formas: </p>
<h6>Métodos set</h6>
<pre class="brush: java; title: ; notranslate">
c.set(ano,mes,dia);
c.set(ano,mês,dia,hora,minuto);
c.set(ano,mês,dia,hora,minuto,segundo);
</pre>
<h6>Método setTime</h6>
<pre class="brush: java; title: ; notranslate">
c.setTime(new Date() );
</pre>
<p>A classe <strong>Calendar</strong> também nos fornece  várias constantes que utilizaremos para manipular uma data entre elas.</p>
<p>Com a data devidamente configurada podemos realizar diversas operações com a data:</p>
<p>Para adicionar ou subtrair um dia, hora, mês ou ano utilizamos o método <strong>add</strong>. O método <strong>add</strong> aceita dois parâmetros, sendo o primeiro um constante inteira que representa a unidade da data que queremos modificar(dia, mês , ano, etc&#8230;) e o segundo quantas vezes será adicionada/subtraída esta unidade.</p>
<p>A unidade é informada utilizando constantes fornecidas pela classe <strong>Calendar</strong> que pode ser:</p>
<h6>Dia:</h6>
<pre class="brush: java; title: ; notranslate">
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK
Calendar.DAY_OF_YEAR
</pre>
<h6>Mês:</h6>
<pre class="brush: java; title: ; notranslate">
Calendar.MONTH
</pre>
<h6>Ano:</h6>
<pre class="brush: java; title: ; notranslate">
Calendar.YEAR
</pre>
<h6>Hora:</h6>
<pre class="brush: java; title: ; notranslate">
Calendar.HOUR
Calendar.HOUR_OF_DAY
</pre>
<h6>Segundos:</h6>
<pre class="brush: java; title: ; notranslate">
Calendar.SECOND
</pre>
<p>Veja o exemplo abaixo:</p>
<pre class="brush: java; title: ; notranslate">
Date d= new Date();
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR,5 );//adicionamos 5 dias a data aual
c.add(Calendar.MONTH,3 );//adicionamos 3 mêses a data atual
c.add(Calendar.YEAR,1 );//adicionamos 1 ano a data atual
</pre>
<h3>DateFormat(java.text.DateFormat)</h3>
<p>Bom agora sabemos como manipula datas, agora precisamos formatar a data para apresentação. A classe <strong>DateFormat</strong> nos fornece uma maneira simples de formatá-la e permite a internacionalização a partir da classe <strong>Locale</strong>.</p>
<pre class="brush: java; title: ; notranslate">
        Date d = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(d);

        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        System.out.println( df.format(c.getTime()) );
</pre>
<p>Para obtermos uma String da data utilizamos o método <strong> format</strong> que retorna uma String no formato especificado no método <strong>getDateInstance()</strong>. A saída do exemplo acima será algo como 03/04/10.</p>
<p>A classe <strong>DateForma</strong> nos fornece vários tipos de formato para data como:</p>
<pre class="brush: java; title: ; notranslate">
Dateformat.SHORT // 03/04/10
Dateformat.MEDIUM // 03/04/2010
Dateformat.LONG //3 de Abril de 2010
Dateformat.FULL //Sábado, 3 de Abril de 2010
</pre>
<p>Embora para muitos casos estes formatos serão suficientes algumas vezes necessitamos de uma formato vem personalizado. Isso pode ser feio através de um subclasse de <strong>DateFormat</strong> a <strong>SimpleDateFormat</strong>.</p>
<pre class="brush: java; title: ; notranslate">
        Date hoje  = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(&quot;dd/MM/yyyy HH:mm:ss&quot;);
        System.out.println( sdf.format(hoje));
</pre>
<p>O construtor de <strong>SimpleDateFormat</strong> recebe uma String que representa o formato da data. Os símbolos utilizados para cada campo da data pode ser visto na tabela abaixo abaixo:</p>
<table>
<tr>
<th>Símbolo</th>
<th>Significado</th>
<th>Apresentação</th>
<th>Exemplo</th>
</tr>
<tr>
<td>G</td>
<td>era designator</td>
<td>(Text)</td>
<td>AD</td>
</tr>
<tr>
<td>y</td>
<td>year</td>
<td>(Number)</td>
<td>1996</td>
</tr>
<tr>
<td>M</td>
<td>month in year</td>
<td>(Text &#038; Number)</td>
<td>July &#038; 07      </td>
</tr>
<tr>
<td>d</td>
<td>day in month</td>
<td>(Number)</td>
<td>10    </td>
</tr>
<tr>
<td>h</td>
<td>hour in am/pm (1~12)</td>
<td>(Number)</td>
<td>12</td>
</tr>
<tr>
<td>H</td>
<td>hour in day (0~23)</td>
<td>(Number)</td>
<td>0</td>
</tr>
<tr>
<td>m</td>
<td>minute in hour</td>
<td>(Number)</td>
<td>30</td>
</tr>
<tr>
<td>s</td>
<td>second in minute</td>
<td>(Number)</td>
<td>55</td>
</tr>
<tr>
<td>S</td>
<td>millisecond</td>
<td>(Number)</td>
<td>978</td>
</tr>
<tr>
<td>E</td>
<td>day in week</td>
<td>(Text)</td>
<td>Tuesday</td>
</tr>
<tr>
<td>D</td>
<td>day in year</td>
<td>(Number)</td>
<td>189</td>
</tr>
<tr>
<td>F</td>
<td>day of week in month</td>
<td>(Number)</td>
<td>2 (2nd Wed in July)</td>
</tr>
<tr>
<td>w</td>
<td>week in year</td>
<td>(Number)</td>
<td>27</td>
</tr>
<tr>
<td>W</td>
<td>week in month</td>
<td>(Number)</td>
<td>2</td>
</tr>
<tr>
<td>a</td>
<td>am/pm marker</td>
<td>(Text)</td>
<td>PM</td>
</tr>
<tr>
<td>k</td>
<td>hour in day (1~24)</td>
<td>(Number)</td>
<td>24</td>
</tr>
<tr>
<td>K</td>
<td>hour in am/pm (0~11)</td>
<td>(Number)</td>
<td>0</td>
</tr>
<tr>
<td>z</td>
<td>time zone</td>
<td>(Text)</td>
<td>Pacific Standard Time</td>
</tr>
</table>
<p>Como vimos o dia da semana pode ser escrito por extenso, que língua ele será utilizada? Normalmente o inglês, mas se quisermos que seja na língua de um local diferente?</p>
<p>Para isso utilizaremos a internacionalização com a classe <strong>Locate</strong> que recebe em seu construtor a língua e o país que queremos utilizar:</p>
<pre class="brush: java; title: ; notranslate">
Locale brasil = new Locale(&quot;pt&quot;,&quot;br&quot;);//portugues do brasil
Locale japao = new Locale(&quot;ja&quot;);// japao
</pre>
<p>O objeto locale de <strong>Locale</strong> pode ser utilizado tanto com a classe <strong>DateFormat</strong> quanto com a classe <strong>SimpleDateFormat</strong>.</p>
<pre class="brush: java; title: ; notranslate">
Date hoje  = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(&quot;E dd &quot;,new Locale(&quot;pt&quot;,&quot;br&quot;));
System.out.println( sdf.format(hoje));

DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,new Locale(&quot;pt&quot;,&quot;br&quot;));
System.out.println( df.format(hoje));
</pre>
<p>Para finalizar como covertermos uma String em um objeto <strong>Date</strong></p>
<pre class="brush: java; title: ; notranslate">
        Date d  = new Date();
        SimpleDateFormat df = new SimpleDateFormat(&quot;DD/MM/yyyy&quot;);
        try {
            d = df.parse(&quot;25/03/2010&quot;);
        } catch (ParseException ex) {
            ex.printStackTrace();

        }
        System.out.println( df.format(d));
</pre>
<p>O métdo <strong>parse </strong> da classe <strong>DateFormat</strong> e <strong.SimpleDateFormat</strong> recebe uma string e convertepara um objeto <strong>Date</strong></p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/10/java.png" class="crp_thumb wp-post-image" alt="Conectando Java com MongoDB" title="Conectando Java com MongoDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark" class="crp_title">Conectando Java com MongoDB</a></li><li><a href="http://www.botecodigital.info/jquery/validando-formularios-com-jquery-plugin-validation/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Validando formulários com JQuery-Plugin-Validation" title="Validando formulários com JQuery-Plugin-Validation" /></a> <a href="http://www.botecodigital.info/jquery/validando-formularios-com-jquery-plugin-validation/" rel="bookmark" class="crp_title">Validando formulários com JQuery-Plugin-Validation</a></li><li><a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2012/01/java-duke-xml1.png" class="crp_thumb wp-post-image" alt="Lendo e escrevendo XML em Java com JDOM" title="Lendo e escrevendo XML em Java com JDOM" /></a> <a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark" class="crp_title">Lendo e escrevendo XML em Java com JDOM</a></li><li><a href="http://www.botecodigital.info/java/java-console-colorido/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/12/java2.png" class="crp_thumb wp-post-image" alt="Java &#8211; Console Colorido" title="Java &#8211; Console Colorido" /></a> <a href="http://www.botecodigital.info/java/java-console-colorido/" rel="bookmark" class="crp_title">Java &#8211; Console Colorido</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/manipulando-datas-em-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Conectando Java com HSQLDB</title>
		<link>http://www.botecodigital.info/java/conectando-java-com-hsqldb/</link>
		<comments>http://www.botecodigital.info/java/conectando-java-com-hsqldb/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 11:11:39 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[hsqldb]]></category>
		<category><![CDATA[jdbc]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=732</guid>
		<description><![CDATA[Muitas vezes desenvolvemos aplicações simples que necessitam de armazenamento de dados sem nenhum grande desempenho mas que seja feita de forma rápida. Uma boa saída é utilizar um banco de dados(SGDB) bem simples como o HSQLDB O HSQLDB é um SGDB de código aberto, escrito totalmente e Java o que torna-o portável. Em termos de desempenho, segurança e recursos não podemos compará-lo a outro bancos de dados como Oracle, Postgres e Microsoft SQL, mas para aplicações pequenas em desktop pode [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes desenvolvemos aplicações simples que necessitam de armazenamento de dados sem nenhum grande desempenho mas que seja feita de forma rápida. Uma boa saída é utilizar um banco de dados(SGDB) bem simples como o <a href="http://hsqldb.org/" target="_blank">HSQLDB</a></p>
<p>O HSQLDB é um SGDB de código aberto, escrito totalmente e Java o que torna-o portável. Em termos de desempenho, segurança e recursos não podemos compará-lo a outro bancos de dados como Oracle, Postgres e Microsoft SQL, mas para aplicações pequenas em desktop pode ser uma excelente pedida.</p>
<p>Uma das vantagens do HSQLDB é sua simplicidade, a capacidade de poder ser rodado em modo cliente-servidor ou standalone, armazenando os dados em memória, arquivo de texto ou banco de dados.</p>
<p>Veremos agora então como executar, criar um banco de dados e acessá-lo:</p>
<p>Primeiramente <a href="http://sourceforge.net/projects/hsqldb/files/hsqldb/hsqldb_1_8_1/" target="_blank">baixamos o HSQLDB</a> depois basta descompactá-lo. Depois de descompactado teremos desde o código fonte até alguns scripts,  mas que nos interessa é o arquivo <strong>hsqldb.jar</strong> que é o pacote do HSQLDB que possui desde o  driver JDBC até ferramentas para o gerenciamento do banco de dados.</p>
<p>Antes de começarmos a trabalhos com o HSQLDB devemos adicioná-lo ao CLASSPATH:</p>
<pre class="brush: plain; title: ; notranslate">
CLASSPATH = %CLASSPATH%;C:/hsqldb/lib/hsqldb.jar
</pre>
<p>A interface de gerenciamento em Swing pode ser aberta pelo comando:</p>
<pre class="brush: plain; title: ; notranslate">
java org.hsqldb.util.DatabaseManagerSwing
</pre>
<p>Ok, agora vamos conectar/criar um banco standalone para ser armazenado na pasta &#8220;c:\banco&#8221; com o nome do banco &#8220;dbteste&#8221;</p>
<div style="text-align:center">
<img src="http://www.botecodigital.info/wp-content/uploads/2009/10/conectar-hsqld-300x236.jpg" alt="Parâmetros para a conexão title="><br />
<br />Parâmetros para a conexão</div>
<p>Agora vamos criar nossa tabela:<br />
</p>
<pre class="brush: sql; title: ; notranslate">
CREATE TABLE  usuarios(
        id IDENTITY PRIMARY KEY,
        nome VARCHAR(50),
        email VARCHAR(50)
);
</pre>
<p>O HSQLDB aceita os comando básicos de SQL, com algumas pequenas diferenças, por exemplo o tipo de dado inteiro auto-incrementável é IDENTITY e ele começa a contar de 0(atenção). Com a tabela criada vamos inserir alguns dados:</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO usuarios(nome,email) VALUES('Boteco Digital','blogbotecodigital@gmail.com');
INSERT INTO usuarios(nome,email) VALUES('Rodrigo','rodrigo@algumacoisa.com');
INSERT INTO usuarios(nome,email) VALUES('Thiago','thiago@algumacoisa.com');
INSERT INTO usuarios(nome,email) VALUES('Joao','joao@algumacoisa.com');
</pre>
<p>** DETALHE IMPORTANTE **<br />
Antes de fechar o gerenciador lembre-se de executar o seguinte comando:</p>
<pre class="brush: plain; title: ; notranslate">
SHUTDOWN;
</pre>
<p>Para os dados serem gravados corretamente.</p>
<p>Para conferir se os dados foram inseridos com êxito execute o seguinte comando:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT * from usuarios
</pre>
<p>Nosso banco está criado e populado agora basta conectá-lo pelo Java:</p>
<pre class="brush: java; title: ; notranslate">
try{
    Class.forName(&quot;org.hsqldb.jdbcDriver&quot;);
    Connection con = DriverManager.getConnection(&quot;jdbc:hsqldb:file:/banco/dbteste&quot;, &quot;sa&quot;, &quot;&quot;);

    Statement stm= con.createStatement();
    ResultSet rs = stm.executeQuery(&quot;SELECT * FROM usuarios&quot;);

    while(rs.next()){
        String nome = rs.getString(&quot;nome&quot;);
        String email = rs.getString(&quot;email&quot;);

        System.out.println(nome+&quot; - &quot;+email);
    }
    stm.execute(&quot;SHUTDOWN&quot;);
}catch(ClassNotFoundException e){
    System.out.println(&quot;Erro ao carregar o driver JDBC. &quot;);
}catch(SQLException e){
    System.out.println(&quot;Erro de SQL: &quot;+e);
    e.printStackTrace();
}
</pre>
<p>Na linha 2 carregamos o driver JDBC, este driver está no  no pacote <strong>hsqldb.jar</strong> então não esqueça de colocá-lo no seu CLASSPATH.</p>
<p>Na linha criamos uma conexão através da String <strong>&#8220;jdbc:hsqldb:file:/banco/dbteste&#8221;</strong>. Esta String contém as seguintes informações de conexão:</p>
<ul>
<li><strong>jdbc</strong> tipo de driver a ser utilizado para conexão</li>
<li><strong>hsqldb</strong> este é o driver que utilizaremos para conectar. Ele já foi carregado na memória  através da instrução &#8220;Class.forName(&#8220;org.hsqldb.jdbcDriver&#8221;);&#8221;<;li>
<li><strong>file</strong> informa que o banco está  armazenado em arquivo(standalone)</li>
<li><strong>/banco/dbteste</strong> ando nosso banco está armazendo, no caso na em um pasta na raiz de diretório chamada banco, que terá arquivox com o nome de dbteste.( c:\banco)
</ul>
<p>Na linha 5 criamos um objeto Statment para realizar um consulto, na linha 6 executamos a consulta e recuperamos seu retorno.</p>
<p>Da linha 8 até 13 iteramos pelo resultado da consulta e exibimos os valores na tela. Na linha 14 executamos o comando SHUTDOW.</p>
<p>Como vimos este exemplo cria uma banco de dados standalone para uma aplicação local. O HSQLDB também pode funcionar no modo servidor para isso temos que executá-lo através   do seguinte comando.</p>
<pre class="brush: plain; title: ; notranslate">
java org.hsqldb.Server -database.0 dbteste2 -dbname.0 dbteste2
</pre>
<p><strong>Detalhe importante:</strong> ele irá criar o banco de dados dentro da pasta que foi executado o comando acima!</p>
<p>Para conecta-lo pelo Java utilizamos o seguinte código:</p>
<pre class="brush: java; title: ; notranslate">
Connection con = DriverManager.getConnection(&quot;jdbc:hsqldb:hsql://localhost/dbteste2&quot;, &quot;sa&quot;, &quot;&quot;);
</pre>
<p>Bom isso é tudo pessoal!</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/php/pdo-php-data-object-trocar-de-banco-de-dados-ja-nao-e-dor-de-cabeca/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/04/php.png" class="crp_thumb wp-post-image" alt="PDO &#8211; PHP Data Object &#8211; Trocar de banco de dados já não é dor de cabeça" title="PDO &#8211; PHP Data Object &#8211; Trocar de banco de dados já não é dor de cabeça" /></a> <a href="http://www.botecodigital.info/php/pdo-php-data-object-trocar-de-banco-de-dados-ja-nao-e-dor-de-cabeca/" rel="bookmark" class="crp_title">PDO &#8211; PHP Data Object &#8211; Trocar de banco de dados já não é dor de cabeça</a></li><li><a href="http://www.botecodigital.info/php/exemplo-de-autenticacao-parte-1/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/04/php.png" class="crp_thumb wp-post-image" alt="Exemplo de autenticação em PHP utilizando sessão- Parte 1" title="Exemplo de autenticação em PHP utilizando sessão- Parte 1" /></a> <a href="http://www.botecodigital.info/php/exemplo-de-autenticacao-parte-1/" rel="bookmark" class="crp_title">Exemplo de autenticação em PHP utilizando sessão- Parte 1</a></li><li><a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/10/java.png" class="crp_thumb wp-post-image" alt="Conectando Java com MongoDB" title="Conectando Java com MongoDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark" class="crp_title">Conectando Java com MongoDB</a></li><li><a href="http://www.botecodigital.info/jquery/carregando-um-combobox-com-ajax-com-jquery/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/05/jquery.png" class="crp_thumb wp-post-image" alt="Carregando um ComboBox com AJAX com JQuery" title="Carregando um ComboBox com AJAX com JQuery" /></a> <a href="http://www.botecodigital.info/jquery/carregando-um-combobox-com-ajax-com-jquery/" rel="bookmark" class="crp_title">Carregando um ComboBox com AJAX com JQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/conectando-java-com-hsqldb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fibonacci  com Recursão</title>
		<link>http://www.botecodigital.info/algoritmos/fibonacci-com-recursao/</link>
		<comments>http://www.botecodigital.info/algoritmos/fibonacci-com-recursao/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 13:01:27 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[fibonnaci]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=630</guid>
		<description><![CDATA[Recursão ou método recursivo nada mais é do que um método que, em sua implementação, chama a si mesmo. Mas você deve estar se perguntando para que isso me serve? Bom tecnicamente você pode fazer com iteração tudo o que você pode fazer com recursão, mas para alguns problemas computacionais as soluções recursivas tornam-se mais simples. Em geral quando você pode simplificar um problema, sem deixar de ser o mesmo problema, até que ele se torne menor e de mais [...]]]></description>
			<content:encoded><![CDATA[<p>Recursão ou método recursivo nada mais é do que um método que, em sua implementação, chama a si mesmo.</p>
<p>Mas você deve estar se perguntando para que isso me serve? Bom tecnicamente você pode fazer com iteração tudo o que você pode fazer com recursão, mas para alguns problemas computacionais as soluções recursivas tornam-se mais simples. Em geral quando você pode simplificar um problema, sem deixar de ser o mesmo problema, até que ele se torne menor e de mais fácil resolução é um problema que pode ser resolvido com recursão.</p>
<p>Um exemplo clássico de Recursão é a <a href="http://pt.wikipedia.org/wiki/Seq%C3%BC%C3%AAncia_de_Fibonacci" target="_blank">Seqüência de Fibonacci</a> que é uma seqüência que se obtém somando os dois últimos números da seqüência para chegar ao próximo. Vejamos uma implementação recursiva do problema onde mostramos na tela o 6º elemento da seqüência.</p>
<pre class="brush: java; title: ; notranslate">
class Fibonacci{

    public static int fiboRecursivo(int n){
        if( n &lt;= 2){
            return 1;
        }else{
            return Fibonacci.fiboRecursivo(n - 1) + Fibonacci.fiboRecursivo(n - 2);
        }
    }

    public static void main(String args[]){
        int i = Fibonacci.fiboRecursivo(6);
        System.out.println(i);
    }

}
</pre>
<p>O problema da seqüência de Fibonacci pode ser resolvido pela fórmula F(n-1)+F(n-2) sendo que </strong>n</strong> é posição do elemento dentro da seqüência. Como sabemos o primeiro e o segundo elementos da seqüência são <strong>1</strong> chegamos a seguinte simplificação do problema.</p>
<ul>
<li>SE a posição for menor ou igual a 2 retornamos <strong>1</strong></li>
<li>SENÂO simplificamos o problema, tentamos descobrir os dois elementos anteriores ao elemento que queremos, fazemos isso<br />
    chamando o método fiboRecursivo e somamos suas saídas.</li>
</ul>
<p>Ok, o código fica simples, mas e ai? Como ele é executado?</p>
<p>Toda chamada de um método é empilhada em um estrutura de pilha (memória Stack) que isola a área de memória de cada método. Quando fazemos uma chamada a um método a seqüência de execução é parada e passa a executar as instruções que o método chamado contem. O método chamado é empilhado na memória Stack(pilha) e após sua execução é retirado da memória Stack e seqüência de execução volta ao método que o chamou  e a execução prossegue normalmento. Note que o método que está sendo executado sempre estará no topo da memória Stack.</p>
<p>Quando utilizamos chamadas recursivas estamos colocando métodos na memória Stack, para cada chamada ao método <em>fiboRecursivo()</em> uma &#8220;cópia&#8221; dele é colocada na memória e só será retirada quando as chamadas do topo da pilha parar de chamar o métodos e retornar algum valor.</p>
<p>Essa &#8220;cópia&#8221; é totalmente independente das outras, tem seu próprio escopo, variáveis locais e como qualquer método podem manipular atributos.</p>
<div style="text-align:center">
<img src="http://www.botecodigital.info/wp-content/uploads/2009/09/chamda_metodos-300x283.png" alt="chamada_metodos" title="chamada_metodos" width="300" height="283" class="aligncenter size-medium wp-image-638" />
</div>
<p>Um outro exemplo(mais prático) em que podemos utilizar a recursão é para <strong>listar os arquivos de um diretório e de seus subdiretórios </strong>como no exemplo abaixo. </p>
<pre class="brush: java; title: ; notranslate">
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

public class Diretorios {

    private ArrayList&lt;File&gt; arquivos = new ArrayList&lt;File&gt;();

    public void leDiretorio(File dir){
        File[] names = dir.listFiles();
        if( names != null){
            for(int i=0 ; i &lt;names.length;i++){
                if( !names[i].isDirectory() ){
                    this.arquivos.add(names[i]);
                }else{
                    leDiretorio(names[i] );
                }

            }
        }
    }

    public static void main(String args[]){
        Diretorios d = new Diretorios();
        File f= new File(&quot;teste&quot;);
        d.leDiretorio(f);

        Iterator i = d.arquivos.iterator();
        while(i.hasNext()){
            System.out.println( i.next() );
        }

    }
}
</pre>
<p>O código do método leDiretorio faz o seguinte, ele recebe por parâmetro um File que deve ser um diretório, após isso ele lê todos os arquivos do diretório com o método <strong>listFiles()</strong>, após isso ele verifica se foi retornado algum arquivo(File), se sim ele percorre esse <em>array</em> testando se o arquivo não é um diretório ele armazena em um <em>ArrayList</em> se for ele faz chama uma chamada ao próprio método passando por parâmetro esse diretório.</p>
<p>Recursão é uma ferramenta bastante poderosa que pode simplificar muita coisa, embora tenha um custo computacional um pouco mais elevado permite a criação de códigos mais simples e por conseqüência de mais fácil manutenção.</p>
<p>Uma dica é que recursão é uma boa saída para percorrer qualquer estrutura no formato de árvore.</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/12/java2.png" class="crp_thumb wp-post-image" alt="Código espartano" title="Código espartano" /></a> <a href="http://www.botecodigital.info/java/codigo-espartano/" rel="bookmark" class="crp_title">Código espartano</a></li><li><a href="http://www.botecodigital.info/java/java-console-colorido/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/12/java2.png" class="crp_thumb wp-post-image" alt="Java &#8211; Console Colorido" title="Java &#8211; Console Colorido" /></a> <a href="http://www.botecodigital.info/java/java-console-colorido/" rel="bookmark" class="crp_title">Java &#8211; Console Colorido</a></li><li><a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2012/01/java-duke-xml1.png" class="crp_thumb wp-post-image" alt="Lendo e escrevendo XML em Java com JDOM" title="Lendo e escrevendo XML em Java com JDOM" /></a> <a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark" class="crp_title">Lendo e escrevendo XML em Java com JDOM</a></li><li><a href="http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/10/java3.png" class="crp_thumb wp-post-image" alt="Validando dados com expressões regulares em Java" title="Validando dados com expressões regulares em Java" /></a> <a href="http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/" rel="bookmark" class="crp_title">Validando dados com expressões regulares em Java</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/algoritmos/fibonacci-com-recursao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java &#8211; Console Colorido</title>
		<link>http://www.botecodigital.info/java/java-console-colorido/</link>
		<comments>http://www.botecodigital.info/java/java-console-colorido/#comments</comments>
		<pubDate>Sat, 16 May 2009 19:51:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[Enigma Console]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=342</guid>
		<description><![CDATA[Este dias um aluno me perguntou como mudar a cor da saida de um programa JAVA no console pensei um pouco e disse nunca vi nada sobre isso, em nenhum livro ou site, acredito que não seja possível vou dar uma olhada e depois te respondo. Bom pesquisando, descobri que a API do JAVA não fornece métodos para escrever no console utilizando cores, para isso é preciso inserir códigos de cor que pode variar conforme o S.O. ou mesmo de [...]]]></description>
			<content:encoded><![CDATA[<p>Este dias um aluno me perguntou como mudar a cor da saida de um programa JAVA no console pensei um pouco e disse nunca vi nada sobre isso, em nenhum livro ou site, acredito que não seja possível vou dar uma olhada e depois te respondo.</p>
<p>Bom pesquisando, descobri que a API do JAVA não fornece métodos para escrever no console utilizando cores, para isso é preciso inserir códigos de cor que pode variar conforme o S.O. ou mesmo de terminal para terminal.</p>
<p>Isto obviamente não é uma solução portável, então não é condizente com JAVA.</p>
<p>A solução que achei foi utilizar uma biblioteca <a href="http://sourceforge.net/projects/enigma-shell" target="_blank"> <strong>Enigma Console</strong></a> que nada mais é do que um console feito em JAVA utilizando <strong>Swing</strong>.</p>
<p>Primeiramente vamos baixar a biblioteca <a href="http://sourceforge.net/project/showfiles.php?group_id=88079" target="_blank"> Enigma Console</a>. Descompacte o arquivo em uma pasta de sua escolha e adicione à variável de ambiente <strong>CLASSPATH</strong> o caminho absoluto para a biblioteca <strong>Enigma Console</strong> por exemplo:</p>
<p>Variavél de ambiente <strong>CLASSPATH</strong></p>
<pre class="brush: plain; title: ; notranslate">
.;c:\enigma\enigma-all_en_US.jar;
</pre>
<p>Agora basta utiliza-la no código como no exemplo abaixo:</p>
<pre class="brush: java; title: ; notranslate">
import java.awt.Color;
import enigma.console.*;
import enigma.core.Enigma;

public class Cor{

    public static void main(String[] args){
        Console s_console = Enigma.getConsole();
        TextAttributes attrs;
        attrs = new TextAttributes(new Color(96,223,79), new Color(76,62,175));
        s_console.setTextAttributes(attrs);
        System.out.println(&quot;Fundo azul com letras verdes&quot;);

        attrs = new TextAttributes(new Color(255,90,90), new Color(234,255,90));
        s_console.setTextAttributes(attrs);
        System.out.println(&quot;Fundo amarelo com letras vermelhas&quot;);

    }
}
</pre>
<p>Na linha 1 à 3 importamos os objetos que iremos utilizar tanto o objeto do console como a classe Color para podermos definir as cores.</p>
<p>Na linha 8 é onde chamamos o método que cria um novo console e muda a saída padrão para ele, ou seja a partir de agora tudo que escrevermos na saída padrão( <strong>System.out</strong> ) será escrito no novo console!</p>
<p>Na linha 10 é onde definimos os atributos do nosso texto, ou seja, a cor de fundo e a cor do texto, o construtor os parâmetros nesta mesma ordem. Note que utilizamos objetos Color para representar as cores, o construtor deste objeto recebe 3 valores inteiros de 0-255 no sistema <a href="http://pt.wikipedia.org/wiki/RGB" target="_blank">RGB</a>(Vermelho,Verde,Azul) para representar a cor, se precisar use um editor de imagem para descobrir os valores da cor que você deseja.</p>
<p>Na linha 11 configuramos o console com as configurações feitas na linha 10. A partir de agora todo texto escrito no console terá as cores definidas.</p>
<p>Para mudar as cores novamente basca configurar o console novamente com as novas cores desejadas.</p>
<p>Veja como vai ficar o exemplo acima:</p>
<p><img src="http://www.botecodigital.info/wp-content/uploads/2009/05/console.jpg" alt="console" title="console" width="450" height="204" class="aligncenter size-full wp-image-347" /></p>
<p>E por hoje é só pessoal!</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/10/java3.png" class="crp_thumb wp-post-image" alt="Validando dados com expressões regulares em Java" title="Validando dados com expressões regulares em Java" /></a> <a href="http://www.botecodigital.info/java/validando-dados-com-expressoes-regulares-em-java/" rel="bookmark" class="crp_title">Validando dados com expressões regulares em Java</a></li><li><a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2012/01/java-duke-xml1.png" class="crp_thumb wp-post-image" alt="Lendo e escrevendo XML em Java com JDOM" title="Lendo e escrevendo XML em Java com JDOM" /></a> <a href="http://www.botecodigital.info/java/lendo-e-escrevendo-xml-em-java-com-jdom/" rel="bookmark" class="crp_title">Lendo e escrevendo XML em Java com JDOM</a></li><li><a href="http://www.botecodigital.info/java/conectando-java-com-hsqldb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/10/java3.png" class="crp_thumb wp-post-image" alt="Conectando Java com HSQLDB" title="Conectando Java com HSQLDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-hsqldb/" rel="bookmark" class="crp_title">Conectando Java com HSQLDB</a></li><li><a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/10/java.png" class="crp_thumb wp-post-image" alt="Conectando Java com MongoDB" title="Conectando Java com MongoDB" /></a> <a href="http://www.botecodigital.info/java/conectando-java-com-mongodb/" rel="bookmark" class="crp_title">Conectando Java com MongoDB</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/java/java-console-colorido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passeio do Cavalo</title>
		<link>http://www.botecodigital.info/algoritmos/passeio-do-cavalo/</link>
		<comments>http://www.botecodigital.info/algoritmos/passeio-do-cavalo/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 13:50:00 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[desafio]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[xadrez]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=127</guid>
		<description><![CDATA[Esta estudando um pouco de Java estes tempo e me deparei com um exercício bastante interessante no Livro do Deitel, o Passeio do cavalo. O passeio do cavalo é um problema matemático envolvendo o movimento da peça do cavalo no tabuleiro de xadrez. Coloca-se o cavalo em uma das posições de um tabuleiro de xadrez vazio e deve-se movimentar o cavalo seguindo as regras do xadrez, ou seja, movimentar o cavalo em &#8220;L&#8221; para que ele passe por todas as [...]]]></description>
			<content:encoded><![CDATA[<p>Esta estudando um pouco de <em>Java</em> estes tempo e me deparei com um exercício bastante interessante no Livro do <em>Deitel</em>, o <strong>Passeio do cavalo</strong>.</p>
<p>O <strong>passeio do cavalo</strong> é um problema matemático envolvendo o movimento da peça do cavalo no tabuleiro de xadrez. Coloca-se o cavalo em uma das posições de um tabuleiro de xadrez vazio e deve-se movimentar o cavalo seguindo as regras do xadrez, ou seja, movimentar o cavalo em &#8220;L&#8221; para que ele passe por todas as 64 casas do tabuleiro sem repetir nenhuma.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.botecodigital.info/wp-content/imagens/movimentos_cavalor.png" alt="Movimentos realizados pela peça  do xadrez cavalo cavalo" /></p>
<p>Existem dois tipos de <strong>Passeio do Cavalo</strong> o passeio aberto, onde o cavalo para em qualquer casa do tabuleiro  e o passeio fechado onde o cavalo para em uma casa em que, no próximo movimento, pare na casa onde começou.</p>
<p><a href="http://www.botecodigital.info/wp-content/donwloads/PasseioCavalo.rar" target="_blank">Aqui</a> você pode fazer o download do código que eu criei em <em>Java</em> de um passeio aberto, ele segue um <a href="http://pt.wikipedia.org/wiki/Heuristica" target="_blank">heurística</a> de acessibilidade que consta no livro do <em>Deitel</em> que pode ser vista abaixo.</p>
<p style="text-align: center;"><img class="aligncenter" title="Heurística para a resolução do problema do passeio do cavalo" src="http://www.botecodigital.info/wp-content/imagens/heuristica.png" alt="" /></p>
<p>A heurística de acessibilidade consiste em que quanto mais no canto o cavalo está mais difícil é move-lo, então estas casas devem ser passadas primeiro, como vemos na imagem da heurística acima, as casas dos quatro cantos permitem somente dois movimentos, enquanto as casas centrais permitem todos os oito.</p>
<p>Foi isso então, se alguém quiser modificar o código(que não está muito elegante) fique a vontade, só pesso que deixe  um comentário com o código ou me envie por e-mail para mim anexar ao post.</p>
<div id="crp_related"><h4>Posts Relacionados:</h4><ul><li><a href="http://www.botecodigital.info/css/css-sprite/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/01/css.png" class="crp_thumb wp-post-image" alt="CSS Sprite" title="CSS Sprite" /></a> <a href="http://www.botecodigital.info/css/css-sprite/" rel="bookmark" class="crp_title">CSS Sprite</a></li><li><a href="http://www.botecodigital.info/linux/redimensionando-imagens-em-lotebatch-process-com-gimp/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2011/07/gimp-150x150.png" class="crp_thumb wp-post-image" alt="Redimensionando imagens em lote(Batch Process) com Gimp" title="Redimensionando imagens em lote(Batch Process) com Gimp" /></a> <a href="http://www.botecodigital.info/linux/redimensionando-imagens-em-lotebatch-process-com-gimp/" rel="bookmark" class="crp_title">Redimensionando imagens em lote(Batch Process) com Gimp</a></li><li><a href="http://www.botecodigital.info/linux/alterar-posicao-dos-botoes-de-janela-ubuntu-10-04/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2010/06/linux2.png" class="crp_thumb wp-post-image" alt="Alterar posição dos botões de janela &#8211; Ubuntu 10.04" title="Alterar posição dos botões de janela &#8211; Ubuntu 10.04" /></a> <a href="http://www.botecodigital.info/linux/alterar-posicao-dos-botoes-de-janela-ubuntu-10-04/" rel="bookmark" class="crp_title">Alterar posição dos botões de janela &#8211; Ubuntu 10.04</a></li><li><a href="http://www.botecodigital.info/navegadores/extensoes-essenciais-para-firefox/" rel="bookmark"><img width="50" height="50" src="http://www.botecodigital.info/wp-content/uploads/2009/09/navegadores.png" class="crp_thumb wp-post-image" alt="Extensões do Firefox essenciais para um desenvolvedores web" title="Extensões do Firefox essenciais para um desenvolvedores web" /></a> <a href="http://www.botecodigital.info/navegadores/extensoes-essenciais-para-firefox/" rel="bookmark" class="crp_title">Extensões do Firefox essenciais para um desenvolvedores web</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/algoritmos/passeio-do-cavalo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

