Você está na página 1de 29

Módulo 9

Java I/O e Classes essenciais 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.


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)


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
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
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 .
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 }
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’.
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
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.
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 } } }
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”.


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")
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();
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()
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
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 }
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 }
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
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
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
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.
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()); }}
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
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 }
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.
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 }
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!!!
PERGUNTAS ?

Você também pode gostar