SlideShare uma empresa Scribd logo
Bizus em Java
Bibliotecas que todos devem saber
Rodrigo Barbosa - Desenvolvedor líder no Guichê Virtual
Twitter: @digao_barbosa
Email: rodrigo@guichevirtual.com.br
Objetivo
● Público iniciante
● Aumentar produtividade
● Evitar duplicação de código
● Solução de Problemas comuns
Fonte
1. Lendo arquivo - commons-io
public class ReadFile {
public static void main(String [] a) throws IOException {
BufferedReader br=null;
try{
br= new BufferedReader(new FileReader("test.txt"));
String currentLine =null;
while((currentLine=br.readLine())!=null){
System.out.println(currentLine);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(br!=null)
br.close();
}

}
}
Lendo arquivo
commons-io para o resgate
public class ReadFileUtil {
public static void main(String[] a) {
try {
String s = FileUtils.readFileToString(new File("test.txt"));
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Outras utilidades
IOUtils.toString
public static void main(String[] a) throws IOException, URISyntaxException {
String text = IOUtils.toString(new FileInputStream("test.txt"));
String text2 = IOUtils.toString(new URI("http://www.guichevirtual.com.br"));
byte[] bytes = IOUtils.toByteArray(new FileInputStream("test.jug"));
}

FileUtils.write
public static void main(String[] a) throws IOException, URISyntaxException {
FileUtils.write(new File("test.txt"),"Bem vindos ao JUG Vale");
}
commons-io ... e ainda tem
●
●
●
●
●
●

FileUtils.copyDirectory
FileUtils.copyFile
IOUtils.copyLarge
IOUtils.readLines
FileUtils.checksum
FileUtils.contentEquals
2. Gerando tokens - apache-commons-lang
●

Usando API da JDK

public static String generateString(Random rng, String characters,
int length)
{
char[] text = new char[length];
for (int i = 0; i < length; i++)
{
text[i] = characters.charAt(rng.nextInt(characters.length()));
}
return new String(text);
}
De novo a apache nos ajuda
RandomStringUtils - apache commons lang
public static void main(String[] a) throws IOException, URISyntaxException {
String random = RandomStringUtils.random(10, true, true);
String random2 = RandomStringUtils.random(10, 'a', 'b', 'c', 'd', 'e');
}
3. Lidando com Strings - apachecommon-lang
Pra variar, apache commons lang
public static void main(String [] a){
String str="jug vale ";
StringUtils.isBlank(str);//false
StringUtils.abbreviate(str,6);//jug...
StringUtils.capitalize(str);//Jug vale
StringUtils.trim(" abc ");//"abc"
StringUtils.difference("abc","abcde");//"de"
StringUtils.getLevenshteinDistance("abc","abcde");//2
StringUtils.getLevenshteinDistance("abc","abc");//0
StringUtils.getLevenshteinDistance("frog","fog");//1
StringUtils.getLevenshteinDistance("frog","flog");//1
}
4. Trabalhando com Reflection bean-utils
● Lendo uma propriedade simples
String value = (String) PropertyUtils.getSimpleProperty(person, "name");

● Lendo uma propriedade aninhada
String java1 = (String) PropertyUtils.getNestedProperty(person,"skill.name");

● Lendo uma propriedade indexada
String telepone = (String) PropertyUtils.getIndexedProperty(person,"telephones",0);

● Todas as anteriores
String java2 = (String) PropertyUtils.getProperty(person,"skill.name");
bean-utils mais exemplos
● Escrevendo uma propriedade
PropertyUtils.setProperty(person,"skill.name","java");

● Copiando propriedades
PropertyUtils.copyProperties(copia,original);

● Mapa a partir de objeto
Map personMap = PropertyUtils.describe(person);// gera um mapa
5. Trabalhando com Datas
● java.util.Date é zoado
● java.util.Calendar é um pouco menos zoado
● Date é mutável, pode causar problemas
● Difícil de fazer operações
Trabalhando com Datas commons-lang
● DateUtils
○ isSameDay
○ addDays, addHours, addMinutes
○ parseDate

● DateFormatUtils
○ format
Trabalhando com Datas joda time
● Biblioteca completa de datas
● Será nativa do Java 8
● Novos conceitos: Data, horário, intervalo
○ LocalTime, LocalDate,LocalDateTime, Interval
6. Cache
Problema de performance - que tal um cache?
Eu quero também
● Para hibernate, pode usar ehcache
● Para Spring, alguns XMLs de configuração e
@Cacheable
● Para outros casos, Guava pode ajudar
Guava
●
●
●
●

Collections
Strings
Concorrencia
E cache
Guava - cache
● Simples de fazer
● Evita erros comuns
● Dá estatísticas do cache
● Diversas modalidades
Cache como um mapa
Construindo um
Cache
Cache<String,Person> cache = CacheBuilder.
newBuilder()
.maximumSize(1000)
.expireAfterWrite(5,TimeUnit.MINUTES)
.build();

Utilizando (como um
mapa)

cache.put("papito",findByName("supla"));
cache.put("raulzito",findByName("Raul Seixas"));
Person papito = cache.get("papito");
System.out.println(cache.stats().hitRate());
System.out.println(cache.stats().hitCount());
Cache com Loader
Construindo um Cache
Cache<String,Person> autoCache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.build(new CacheLoader<String, Person>() {
@Override
public Person load(String key) throws Exception {
return findByName(key);
}
});

Utilizando
Person papito = cache.get("papito");
System.out.println(cache.stats().hitRate());
7. Cansei de getters e setters
● Muito código sem importância
● Difícil achar o que realmente importa
● Dá trabalho, mesmo com generate do
eclipse
● Possível de erros
Cansei de getters e setters - Qual o melhor?
@Data
public class Person {
private Long id;
private String name;
private String address;
private String telephone;
private String email;
private Date birthDate;
}

public class Person {
private Long id;
private String name;
private String address;
private String telephone;
private String email;
private Date birthDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
Cansei de getters e setters - Lombok
●
●
●
●
●

@Data
Lombok
@Getter
@Setter
@ToString
@EqualsAndHashC
ode
Outros bizús
● imgscalr - Resize fácil (e rápido) de imagens
https://github.com/thebuzzmedia/imgscalr
● granule - minimização de css/js
https://code.google.com/p/granule/
● XStream - Serialização e deserialização de
XML fácil
http://xstream.codehaus.org/
Referências
● A fonte principal: http://pt.scribd.
com/doc/16065335/The-Common-JavaCookbook
● Guava https://code.google.com/p/guavalibraries/

Mais conteúdo relacionado

Mais procurados

programação c 5 aula
programação c 5 aulaprogramação c 5 aula
programação c 5 aula
Christopher Cerqueira
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
Christopher Cerqueira
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
Rafael Lima
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
Marinho Brandão
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
Conviso Application Security
 
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on RailsMinicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Luiz Carvalho
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida
 
Bsides4cooler
Bsides4coolerBsides4cooler
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
Luis Gustavo Almeida
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
Devmedia
 
String e IO
String e IOString e IO
String e IO
Elenilson Vieira
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
Andrews Medina
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
Ismael
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
João Lourenço
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
iMasters
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Luis Gustavo Almeida
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Igor Nicoli
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
Ismael
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
Wilson Júnior
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
Tiago Albineli Motta
 

Mais procurados (20)

programação c 5 aula
programação c 5 aulaprogramação c 5 aula
programação c 5 aula
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
 
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on RailsMinicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Bsides4cooler
Bsides4coolerBsides4cooler
Bsides4cooler
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
String e IO
String e IOString e IO
String e IO
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 

Semelhante a Jug bizus (4)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
Fabrício Rissetto
 
Java 05
Java 05Java 05
Java 05
samuelthiago
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
Thiago Leão Moreira
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
Victor Hugo Germano
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
Bruno Rocha
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
Thiago Leão Moreira
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
Nelson Glauber Leal
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
Henrique Fernandes
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
Guilherme Blanco
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
Caio Ribeiro Pereira
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
Emerson Cardoso
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
Fabrízio Mello
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
tdc-globalcode
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
André Reis
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
Rodrigo Stefani Domingues
 
Design patterns
Design patternsDesign patterns
Design patterns
DouglasSoaresAndrSch
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
Alamo Saravali
 

Semelhante a Jug bizus (4) (20)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Java 05
Java 05Java 05
Java 05
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 

Mais de JugVale

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
JugVale
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
JugVale
 
Webdev
WebdevWebdev
Webdev
JugVale
 
Rest
RestRest
Rest
JugVale
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
JugVale
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
JugVale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
JugVale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
JugVale
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
JugVale
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
JugVale
 

Mais de JugVale (10)

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Webdev
WebdevWebdev
Webdev
 
Rest
RestRest
Rest
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 

Último

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 

Último (8)

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 

Jug bizus (4)

  • 1. Bizus em Java Bibliotecas que todos devem saber Rodrigo Barbosa - Desenvolvedor líder no Guichê Virtual Twitter: @digao_barbosa Email: rodrigo@guichevirtual.com.br
  • 2. Objetivo ● Público iniciante ● Aumentar produtividade ● Evitar duplicação de código ● Solução de Problemas comuns
  • 4. 1. Lendo arquivo - commons-io public class ReadFile { public static void main(String [] a) throws IOException { BufferedReader br=null; try{ br= new BufferedReader(new FileReader("test.txt")); String currentLine =null; while((currentLine=br.readLine())!=null){ System.out.println(currentLine); } }catch (Exception e){ e.printStackTrace(); }finally { if(br!=null) br.close(); } } }
  • 5. Lendo arquivo commons-io para o resgate public class ReadFileUtil { public static void main(String[] a) { try { String s = FileUtils.readFileToString(new File("test.txt")); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } }
  • 6. Outras utilidades IOUtils.toString public static void main(String[] a) throws IOException, URISyntaxException { String text = IOUtils.toString(new FileInputStream("test.txt")); String text2 = IOUtils.toString(new URI("http://www.guichevirtual.com.br")); byte[] bytes = IOUtils.toByteArray(new FileInputStream("test.jug")); } FileUtils.write public static void main(String[] a) throws IOException, URISyntaxException { FileUtils.write(new File("test.txt"),"Bem vindos ao JUG Vale"); }
  • 7. commons-io ... e ainda tem ● ● ● ● ● ● FileUtils.copyDirectory FileUtils.copyFile IOUtils.copyLarge IOUtils.readLines FileUtils.checksum FileUtils.contentEquals
  • 8. 2. Gerando tokens - apache-commons-lang ● Usando API da JDK public static String generateString(Random rng, String characters, int length) { char[] text = new char[length]; for (int i = 0; i < length; i++) { text[i] = characters.charAt(rng.nextInt(characters.length())); } return new String(text); }
  • 9. De novo a apache nos ajuda RandomStringUtils - apache commons lang public static void main(String[] a) throws IOException, URISyntaxException { String random = RandomStringUtils.random(10, true, true); String random2 = RandomStringUtils.random(10, 'a', 'b', 'c', 'd', 'e'); }
  • 10. 3. Lidando com Strings - apachecommon-lang Pra variar, apache commons lang public static void main(String [] a){ String str="jug vale "; StringUtils.isBlank(str);//false StringUtils.abbreviate(str,6);//jug... StringUtils.capitalize(str);//Jug vale StringUtils.trim(" abc ");//"abc" StringUtils.difference("abc","abcde");//"de" StringUtils.getLevenshteinDistance("abc","abcde");//2 StringUtils.getLevenshteinDistance("abc","abc");//0 StringUtils.getLevenshteinDistance("frog","fog");//1 StringUtils.getLevenshteinDistance("frog","flog");//1 }
  • 11. 4. Trabalhando com Reflection bean-utils ● Lendo uma propriedade simples String value = (String) PropertyUtils.getSimpleProperty(person, "name"); ● Lendo uma propriedade aninhada String java1 = (String) PropertyUtils.getNestedProperty(person,"skill.name"); ● Lendo uma propriedade indexada String telepone = (String) PropertyUtils.getIndexedProperty(person,"telephones",0); ● Todas as anteriores String java2 = (String) PropertyUtils.getProperty(person,"skill.name");
  • 12. bean-utils mais exemplos ● Escrevendo uma propriedade PropertyUtils.setProperty(person,"skill.name","java"); ● Copiando propriedades PropertyUtils.copyProperties(copia,original); ● Mapa a partir de objeto Map personMap = PropertyUtils.describe(person);// gera um mapa
  • 13. 5. Trabalhando com Datas ● java.util.Date é zoado ● java.util.Calendar é um pouco menos zoado ● Date é mutável, pode causar problemas ● Difícil de fazer operações
  • 14. Trabalhando com Datas commons-lang ● DateUtils ○ isSameDay ○ addDays, addHours, addMinutes ○ parseDate ● DateFormatUtils ○ format
  • 15. Trabalhando com Datas joda time ● Biblioteca completa de datas ● Será nativa do Java 8 ● Novos conceitos: Data, horário, intervalo ○ LocalTime, LocalDate,LocalDateTime, Interval
  • 16. 6. Cache Problema de performance - que tal um cache?
  • 17. Eu quero também ● Para hibernate, pode usar ehcache ● Para Spring, alguns XMLs de configuração e @Cacheable ● Para outros casos, Guava pode ajudar
  • 19. Guava - cache ● Simples de fazer ● Evita erros comuns ● Dá estatísticas do cache ● Diversas modalidades
  • 20. Cache como um mapa Construindo um Cache Cache<String,Person> cache = CacheBuilder. newBuilder() .maximumSize(1000) .expireAfterWrite(5,TimeUnit.MINUTES) .build(); Utilizando (como um mapa) cache.put("papito",findByName("supla")); cache.put("raulzito",findByName("Raul Seixas")); Person papito = cache.get("papito"); System.out.println(cache.stats().hitRate()); System.out.println(cache.stats().hitCount());
  • 21. Cache com Loader Construindo um Cache Cache<String,Person> autoCache = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(5, TimeUnit.MINUTES) .build(new CacheLoader<String, Person>() { @Override public Person load(String key) throws Exception { return findByName(key); } }); Utilizando Person papito = cache.get("papito"); System.out.println(cache.stats().hitRate());
  • 22. 7. Cansei de getters e setters ● Muito código sem importância ● Difícil achar o que realmente importa ● Dá trabalho, mesmo com generate do eclipse ● Possível de erros
  • 23. Cansei de getters e setters - Qual o melhor? @Data public class Person { private Long id; private String name; private String address; private String telephone; private String email; private Date birthDate; } public class Person { private Long id; private String name; private String address; private String telephone; private String email; private Date birthDate; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email;
  • 24. Cansei de getters e setters - Lombok ● ● ● ● ● @Data Lombok @Getter @Setter @ToString @EqualsAndHashC ode
  • 25. Outros bizús ● imgscalr - Resize fácil (e rápido) de imagens https://github.com/thebuzzmedia/imgscalr ● granule - minimização de css/js https://code.google.com/p/granule/ ● XStream - Serialização e deserialização de XML fácil http://xstream.codehaus.org/
  • 26. Referências ● A fonte principal: http://pt.scribd. com/doc/16065335/The-Common-JavaCookbook ● Guava https://code.google.com/p/guavalibraries/