java i/o e classes essencias da linguagem java

29
Módulo 9 Java I/O e Classes essenciais da linguagem Java

Upload: roosewelt

Post on 06-Jun-2015

1.736 views

Category:

Documents


2 download

DESCRIPTION

JAVA I/O e classes essencias da linguagem Java

TRANSCRIPT

Page 1: JAVA I/O  e classes essencias da linguagem Java

Módulo 9

Java I/O e Classes essenciais da linguagem Java

Page 2: JAVA I/O  e classes essencias da linguagem Java

Objetivos

• Escrever um programa que utilize argumentos de linha de comando e propriedades do sistema; • Escrever um programa que lê da entrada padrão; • Escrever um programa que pode criar, ler e gravar arquivos; • Trabalhar com StringBuilder em vez de StringBuffer • Identificar “deprecated classes – classes obsoletas” e como migrar.

Page 3: JAVA I/O  e classes essencias da linguagem Java

Argumentos de Linha de Comando

• Qualquer aplicação em Java pode utilizar argumentos de linha de comando. • Estes argumentos são Strings que são inseridas na linha de comando ao se invocar o interpretador Java, após o nome da classe: java TestaArgs arg1 arg2 "outro argumento" • Cada argumento de linha de comando é inserido no array args que é passado ao método estático main: public static void main(String[]args)

Page 4: JAVA I/O  e classes essencias da linguagem Java

Argumentos de Linha de Comando

1 public class TestaArgumentos { 2 public static void main(String[]args) { 3 for (int i = 0; i < args.length; i++ ) { 4 System.out.println("argumento[" + i + "] =" + args[i]); 5 } 6 } 7 } java TestaArgumentos arg1 arg2 "outro argumento" A saida deste programa é: args[0] = arg1 args[1] = arg2 args[2] = outro argumento

Page 5: JAVA I/O  e classes essencias da linguagem Java

Propriedades do Sistema

• Propriedades do Sistema é uma característica que substitui o conceito de variáveis de ambiente (que é dependente de plataforma). • O método System.getProperties retorna um objeto Properties que contém as propriedades do sistema.

• Use a opção -D para incluir uma nova propriedade java -DminhaPropriedade=25 TestaPropriedade

Page 6: JAVA I/O  e classes essencias da linguagem Java

A Classe Properties • A classe Properties implementa o mapeamento de nomes para valores (um mapeamento de String para String). • O método propertyNames retorna um objeto Enumeration contendo todos nomes de propriedades. • O método getProperty retorna uma String representando o valor da propriedade nomeada. • Você pode ler e escrever uma coleção de propriedades em um arquivo utilizando os métodos load e store .

Page 7: JAVA I/O  e classes essencias da linguagem Java

Propriedades do Sistema

1 import java.util.Properties; 2 import java.util.Enumeration; 3 4 public class TestaPropriedades { 5 public static void main(String[] args) { 6 Properties propriedades = System.getProperties(); 7 Enumeration nomesPropriedades = propriedades.propertyNames(); 8 9 while (nomesPropriedades.hasMoreElements() ) { 10 String nome = (String) nomesPropriedades.nextElement(); 11 String propriedade = propriedades.getProperty(nome); 12 System.out.println("propriedade ’" + nome 13 + "’ é ’" + propriedade + "’"); 14 } 15 } 16 }

Page 8: JAVA I/O  e classes essencias da linguagem Java

Propriedades do Sistema(Cont.) java -DminhaPropriedade=mengo TestaPropriedades Eis um trecho da saida: propriedade ’java.vm.version’ é ’1.4.0’ propriedade ’java.compiler’ é ’NONE’ propriedade ’path.separator’ é ’:’ propriedade ’file.separator’ é ’/’ propriedade ’user.home’ is ’/home/Raskolnikov’ propriedade ’java.specification.vendor’ é ’Sun Microsystems Inc.’ propriedade ’user.language’ é ’en’ propriedade ’user.name’ é ’Raskolnikov’ propriedade ’minhaPropriedade’ é ’mengo’.

Page 9: JAVA I/O  e classes essencias da linguagem Java

Java I/O

• System.out permite escrever na saída padrão. • É um objeto do tipo PrintStream.

• System.in permite ler da entrada padrão.

• É um objeto do tipo InputStream.

• System.err permite escrever para a saída de “erro padrão.” • É um objeto do tipo PrintStream

Page 10: JAVA I/O  e classes essencias da linguagem Java

Escrevendo na Saída Padrão

• O método println imprime o argumento e um caracter de nova linha (\n). • O método print imprime o argumento sem o caracter de nova linha. • Exite sobrecarga dos métodos print e println para a maioria dos tipos primitivos (boolean, char, int, long, float, e double) e para char[], Object, e String. • Os métodos print(Object) e println(Object)invocam o método toString no argumento.

Page 11: JAVA I/O  e classes essencias da linguagem Java

Lendo da Entrada Padrão 1 import java.io.*; 2 3 public class LeituraTeclado { 4 public static void main (String args[]) { 5 String s; 6 // Cria um objeto BufferReader para ler linha por linha do teclado 7 8 InputStreamReader ir = new InputStreamReader(System.in); 9 BufferedReader in = new BufferedReader(ir); 10 11 System.out.println("Unix: Digite ctrl-d ou ctrl-c para sair" + 12 "\nWindows: Digite ctrl-z para sair"); 13 try { 14 // Lê cada linha de entrada e a exibe na tela. 15 s = in.readLine(); // trava o console a espera de digitação 16 while (s != null) { 17 System.out.println("Linha lida: " + s); 18 s = in.readLine(); 19 } 20 21 // Fecha o objeto BufferReader para economia de recursos. 22 in.close(); 23 } catch (IOException e) { // trata exceções de E/S. 24 e.printStackTrace(); 25 } } }

Page 12: JAVA I/O  e classes essencias da linguagem Java

Criação e Leitura/Escrita de Arquivos • Pacote java.io • Criando objetos File • Manipulando objetos File • Lendo e escrevendo em fluxos de arquivo “file streams”.

Page 13: JAVA I/O  e classes essencias da linguagem Java

Criando um Objeto File

... File meuArquivo; meuArquivo = new File("meuArquivo.txt");// ou meuArquivo = new File("MeusDocumentos","meuArquivo.txt"); • Diretórios são tratados como arquivos em Java; a classe File suporta métodos para recuperar um array de arquivos em um diretório. File meuDir = new File("MeusDocumentos"); meuArquivo = new File(meuDir,"meuArquivo.txt")

Page 14: JAVA I/O  e classes essencias da linguagem Java

File:Testes e Utilitários

• Métodos contendo informações sobre arquivos: String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo(File novoNome)

• Métodos para testes em arquivos: boolean exists() boolean canWrite() boolean canRead() boolean isFile() boolean isDirectory() boolean isAbsolute();

Page 15: JAVA I/O  e classes essencias da linguagem Java

File:Testes e Utilitários

• Métodos utilitários de arquivos: long lastModified() long length() boolean delete()

• Métodos utilitários de diretórios: boolean mkdir() String[]list()

Page 16: JAVA I/O  e classes essencias da linguagem Java

Fluxo de Entrada e Saída Para Arquivos

• Leitura em Arquivos:

• Utilize a classe FileReader para ler caracteres • Utilize a classe BufferedReader para utilizar o método

readLine • Escrita em Arquivos:

• Utilize a classe FileWriter para escrever caracteres em um arquivo.

• Utilize a classe PrintWriter para utilizar os métodos print e println

Page 17: JAVA I/O  e classes essencias da linguagem Java

Exemplo de Leitura de Arquivo

1 import java.io.*; 2 public class LeituraDeArquivo { 3 public static void main (String[] args) { 4 // Cria um arquivo 5 File arquivo= new File(args[0]); // java LeituraDeArquivo // fernando_pessoa.txt 6 7 try { 8 // Cria o BufferReader para ler cada linha de um 9 // arquivo. 10 BufferedReader br = new BufferedReader(new FileReader (arquivo)); 11 String s; 12 // Lê cada linha do arquivo e exibe na tela. 13 s = br.readLine(); 14 while (s != null ) { 15 System.out.println("Lido: " + s); 16 s = br.readLine(); 17 } 18 // Fecha o BufferReader, que tb fecha o FileReader. 19 br.close(); 20 21 } catch (FileNotFoundException e1) { 22 // se o arquivo não existir 23 System.err.println("Arquivo não encontrado: " + arquivo); 24 25 } catch (IOException e2) { 26 // Trata outras exceções. 27 e2.printStackTrace(); 28 } 29 } 30 }

Page 18: JAVA I/O  e classes essencias da linguagem Java

Exemplo de Gravação em Arquivo

1 import java.io.*; 2 3 public class EscritaEmArquivo { 4 public static void main (String[] args) { 5 // Cria o arquivo 6 File file = new File(args[0]); 7 8 try { 9 // Cria o BufferReader para ler cada linha de da entrada // padrão. 10 BufferedReader in 11 = new BufferedReader(new InputStreamReader(System.in)); 12 // Cria um objeto PrintWriter no arquivo. 13 PrintWriter out 14 = new PrintWriter(new FileWriter(file)); 15 String s; 16 17 System.out.print("Digite o texto do arquivo texto."); 18 System.out.println("[Digite ctrl-d(ou ctrl-z)para + + “sair]"); 19 20 // Le linha a linha do teclado e exibe na tela. 21 while ((s = in.readLine()) != null) { 22 out.println(s); 23 } 24 25 // Fecha o BufferReader e o FileWriter. 26 in.close(); 27 out.close(); 28 29 } catch (IOException e) { 30 // Trata possíveis exceções de E/S. 31 e.printStackTrace(); 32 } 33 } 34 }

Page 19: JAVA I/O  e classes essencias da linguagem Java

A Classe Math

A classe Math contém um grupo de métodos estáticos para funções matemáticas: • Truncamento: ceil, floor, e round • Variações sobre max, min, e abs(valor absoluto) • Trigonometria: sin, cos, tan, asin, acos, atan, toDegrees, e toRadians • Logaritmos: log e exp • Outros: sqrt, pow, e random • Constantes: PI e E

Page 20: JAVA I/O  e classes essencias da linguagem Java

A Classe String

• Objetos String são sequências de caracteres Unicode imutáveis. • Operações que criam novas strings: concat, replace, substring, toLowerCase, toUpperCase, e trim.

• Operações de pesquisa: endsWith, startsWith, indexOf, e lastIndexOf.

• Operações de comparação: equals, equalsIgnoreCase, e compareTo.

• Outras operações: charAt e length

Page 21: JAVA I/O  e classes essencias da linguagem Java

A Classe StringBuffer

• Objetos StringBuffer são sequências de caracteres Unicode mutáveis. • Construtores:

• StringBuffer()– Cria um buffer vazio. • StringBuffer(int capacidade)– Cria um buffer

vazio com capacidade inicial especificada • StringBuffer(String StringInicial)– Cria um

buffer que inicialmente contém a string especificada

• Operações de modificação: append, insert, reverse, setCharAt, e setLength

Page 22: JAVA I/O  e classes essencias da linguagem Java

A Classe StringBuilder

• Introduzida no Java 5.0 • Possui melhor desempenho do que StringBuffer

o Deve ser utilizada apenas em operações Thread-Safe.

• Se o código que você está trabalhando for Thread-Safe, compensa utilizar StringBuilder

• Reutiliza os mesmos métodos de StringBuffer • Lembre-se que tanto StringBuffer quanto StringBuilder são

muito usados na concatenação de Strings dentro de um loop.

Page 23: JAVA I/O  e classes essencias da linguagem Java

Exemplo: A Classes StringBuffer e StringBuilder

public class TesteStringMutavel { public static void main (String [] args){ StringBuffer nome = new StringBuffer(); // Usando StringBuffer (Pré Java 5) nome.append("Rodrigo"); nome.append(" "); nome.append("Martins"); nome.append(" "); nome.append("Pagliares"); System.out.println(nome.toString()); StringBuilder nome2 = new StringBuilder(); // Usando StringBuffer (Recomendado) nome2.append("Rodrigo"); nome2.append(" "); nome2.append("Martins"); nome2.append(" "); nome2.append("Pagliares"); System.out.println(nome2.toString()); }}

Page 24: JAVA I/O  e classes essencias da linguagem Java

Deprecation (Obsoleto)

• “Deprecation” torna obsoletas classes, atributos, métodos, construtores, etc. • Declarações obsoletas são substituídas por métodos com uma convenção de nomes melhor padronizada. • Ao fazer migração de código, compile o código com o flag -deprecation: javac -deprecation MeuArquivo.java

Page 25: JAVA I/O  e classes essencias da linguagem Java

Deprecation

Código JDK 1.1, antes de “deprecation”: 1 package meusutilitarios; 2 3 import java.util.*; 4 import java.text.*; 5 6 public final class ConversorDatas { 7 private static final String DIA_DA_SEMANA [] = 8 {"Domingo","Segunda","Terça","Quarta", 9 "Quinta", "Sexta", "Sábado"}; 10 11 public static String getDiaDaSemana(String data){ 12 int dia, mes, ano; 13 14 StringTokenizer st = new StringTokenizer (data, "/"); 15 16 dia = Integer.parseInt(st.nextToken()); 17 mes = Integer.parseInt(st.nextToken()); 18 ano = Integer.parseInt(st.nextToken()); 19 Date d = new Date (ano, mes, dia); 20 21 return (DIA_DA_SEMANA[d.getDay()]); 22 } 23 }

Page 26: JAVA I/O  e classes essencias da linguagem Java

Deprecation

Compilando o código anterior com o flag -deprecation permite: javac -deprecation ConversorDatas.java ConversorDatas.java:19:warning:Date(int,int,int) in java.util.Date has been deprecated Date d = new Date(ano,mes,dia); ^ ConversorData.java:21:warning:getDay() in java.util.Date has been deprecated return (DIA_DA_SEMANA[d.getDay()]); ^ 2 warnings.

Page 27: JAVA I/O  e classes essencias da linguagem Java

Deprecation(Cont.) Uma versão reescrita para Java 2 SDK seria: 1 package meusutilitarios; 2 3 import java.util.*; 4 import java.text.*; 5 6 public final class ConversorDatas{ 7 private static String dia_Da_Semana[] = 8 {"Domingo","Segunda","Terça","Quarta", 9 "Quinta","Sexta","Sábado"}; 10 11 public static String getDiaDaSemana(String data) { 12 Date d = null; 13 SimpleDateFormat sdf = new SimpleDateFormat ("dd/mm/yy"); 14 15 try { 16 d = sdf.parse(data); 17 } catch (ParseException e) { 18 System.out.println (e); 19 e.printStackTrace(); 20 } 21 22 // Cria o objeto GregorianCalendar 23 Calendar c = new GregorianCalendar( 25 TimeZone.getTimeZone("EST"),Locale.US); 26 c.setTime(d); 27 28 return(dia_Da_Semana[(c.get(Calendar.DAY_OF_WEEK)-1)]); 30 } 31 }

Page 28: JAVA I/O  e classes essencias da linguagem Java

Artigo: Datas e Horas em Java

• Leia e execute os exemplos presentes no artigo Datas e Horas em Java de Fernando Lozano. o Artigo publicado na revista Java Magazine –

http://www.javamagazine.com.br.

• O conteúdo deste artigo poderá ser cobrado em nossa próxima avaliação, como questão extra!!!

Page 29: JAVA I/O  e classes essencias da linguagem Java

PERGUNTAS ?