Upload
carlos-daniel-ribeiro
View
822
Download
5
Embed Size (px)
DESCRIPTION
Objetivo da aula: Entender como utilizar as interface gráficas do JavaSwingAWTCriação de formulário e inserir componentes visuais nosmesmosProgramação de EventosGerenciamento básico de LayoutUso do NetBeans com a Interface Gráfica
Citation preview
04/11/2008
1
Java Avançado
Manipulando ArquivosProf. Jucimar Souza
Arquivos
� Um dos meios de armazenamento persitentes;
� Usa o mecanismo de leitura e escrita em um dispositivo;
� Vamos verificar as formas de ler e gravar dados em um arquivo utilizando o pacote java.io
04/11/2008
2
Classe File
A classe File é a classe do Java que
permite ter acesso ‘as informações sobre o
sistema de arquivos. Nome, diretório,
tamanho, permissões de escrita e leitura e
outras coisas mais.
UsoDoFile.java1. import java.io.File;
2. public class UsoDoFile {3. public static void main(String[] args) {4. File arquivo = new File("MeuTexto.txt");5. System.out.println("Nome: " + arquivo.getName());6. System.out.println("Caminho: " +
arquivo.getAbsolutePath());7.
8. System.out.println("Existe? " + arquivo.exists());9. System.out.println("É um diretório? " +
arquivo.isDirectory());10. System.out.println("É um arquivo? " + arquivo.isFile());11. System.out.println("Pode ser lido? " + arquivo.canRead());12. System.out.println("Pode ser escrito? " +
arquivo.canWrite());13. }14. }
04/11/2008
3
Classe File
� A classe File também é uma representação para arquivos e diretórios do sistema, trazendo informações adicionais sobre o sistema operacional, tais como qual caractere é separador de diretório, informações sobre disco disponíveis, etc.
InformacaoSistema.java
import java.io.File;
public class InformacaoSistema {public static void main(String[] args) {
System.out.println ("Separador de Path: " + File.pathSeparator);System.out.println ("Separador de Diretório: " + File.separator);
File discos [] = File.listRoots();for (int cont=0; cont<discos.length; cont++) {
System.out.println ("Disco " + cont + ": " + discos[cont]);}
}}
04/11/2008
4
Streams, Readers e Writers
� Em java, arquivos são considerados fonte, quando realizamos a leitura a partir dele; e destino, quando realizamos a escrita nele.
� Na leitura, os dados partem da fonte e trafegam ordenados unidade a unidade até o programa ou classe java.
� Na gravação, o programa envia os dados ordenados, unidade a unidade, para um destino.
Streams, Readers e Writers
� Não é possivel transferir tudo ao mesmo tempo
� Chamamos este processo de fluxo, ou Stream.
� Fluxo de entrada - InputStream� Fluxo de Saida – OutputStream� Streams normalmente são tratados como
dados representados por números ou bytes, por isso são chamados de leitura e escrita binária.
04/11/2008
5
Streams, Readers e Writers
� Existem ainda os arquivos que só armazenam caracteres, chamados de arquivos texto
� Java possui leitores e escritores especiais para o tipo caractere chamados de :� FileReader para leitura� FileWriter para escrita
Leitor.java1. import java.io.File;2. import java.io.FileReader;3. import java.io.IOException;
4. public class Leitor {5. public static String ler(File arquivo) {6. StringBuffer sb = new StringBuffer();7. try {8. FileReader reader = new FileReader(arquivo);9. int c;10. do {11. c = reader.read();12. if (c!=-1) {13. sb.append( (char)c );14. }15. } while (c != -1);16. reader.close();17. } catch (IOException e) {18. e.printStackTrace();19. }20. return sb.toString();21. }22. }
04/11/2008
6
UsoLeitor.java
1. import java.io.File;
2. public class UsoLeitor {3. public static void main(String[] args) {4. File arquivo = new File("MeuTexto.txt");5. String s = Leitor.ler(arquivo);6. System.out.println(s);7. }8. }
Escritor.java1. import java.io.File;2. import java.io.FileWriter;3. import java.io.IOException;
4. public class Escritor {5. public static void escreve(File arquivo, String texto) {6. try {7. FileWriter writer = new FileWriter(arquivo);8. char [] c = texto.toCharArray();9. for (int cont=0; cont<c.length; cont++) {10. writer.write(c[cont]);11. }12. writer.close();13. } catch (IOException e) {14. e.printStackTrace();15. }16. }17. }
04/11/2008
7
UsoEscritor.java1. import java.io.File;
2. public class UsoEscritor {3. public static void main(String[] args) {4. File arquivo = new File("Saida.txt");5. String texto = "Este texto será gravado!\r\nLinha
dois";6. Escritor.escreve(arquivo, texto);7. }8. }
Copiador.java� import java.io.File;
� public class Copiador {� public static void main(String[] args) {� File entrada = new File("MeuTexto.txt");� File saida = new File("MeuTextoCopiado.txt");� String s = Leitor.ler(entrada);� Escritor.escreve(saida, s);� }
� }
04/11/2008
8
CopiadorBinario.java1. import java.io.File;2. import java.io.FileInputStream;3. import java.io.FileOutputStream;4. import java.io.IOException;
5. public class CopiadorBinario {6. public static void copia(File entrada, File saida) {7. try {8. FileInputStream input = new FileInputStream(entrada);9. FileOutputStream output = new FileOutputStream(saida);10. int c;11. do {12. c = input.read();13. if (c!=-1) {14. output.write(c);15. }16. } while (c != -1);17. input.close();18. output.close();19. } catch (IOException e) {20. e.printStackTrace();21. }22. }23. }
UsoCopiadorBinario.java1. import java.io.File;
2. public class UsoCopiadorBinario {3. public static void main(String[] args) {4. File entrada = new File("figura.jpg");5. File saida = new
File("ImagemCopiada.jpg");6. System.out.println("Iniciando a cópia");7. CopiadorBinario.copia(entrada, saida);8. System.out.println("Cópia concluida");9. }10. }
04/11/2008
9
Filtros e Buffers
� São objetos intermediários que irão se encarregar de pegar os dados de uma ponta e converter, transformar ou armazenar em estruturas mais complexas.
� Os buffers podem trabalhar com uma linha inteira. Ou seja, o buffer irá ler os dados caractere a caractere do disco e converterá tudo o que foi lido em uma String única e repassa para o programa.
LeitorBuffer.java1. import java.io.BufferedReader; import java.io.File;2. import java.io.FileReader; import java.io.IOException;
3. public class LeitorBuffer {4. public static String ler(File arquivo) {5. StringBuffer sb = new StringBuffer();6. try {7. FileReader reader = new FileReader(arquivo);8. BufferedReader bufReader = new BufferedReader(reader);9. String s;10. do { s = bufReader.readLine();11. if (s!=null) {12. sb.append( s + "\r\n" );13. }14. } while (s!=null);15. bufReader.close();16. reader.close();17. } catch (IOException e) {18. e.printStackTrace();19. }20. return sb.toString();21. }22. }
04/11/2008
10
EscritorBuffer.java1. import java.io.BufferedWriter;2. import java.io.File;3. import java.io.FileWriter;4. import java.io.IOException;
5. public class EscritorBuffer {6. public static void escreve(File arquivo, String texto) {7. try {8. FileWriter writer = new FileWriter(arquivo);9. BufferedWriter bufWriter = new BufferedWriter(writer);10. bufWriter.write(texto);11. bufWriter.close();12. writer.close();13. } catch (IOException e) {14. e.printStackTrace();15. }16. }17. }
CopiadorBuffer.java1. import java.io.File;
2. public class CopiadorBuffer {3. public static void main(String[] args) {4. File entrada = new
File("MeuTexto.txt");5. File saida = new File("MeuTexto2.txt");6. String s = LeitorBuffer.ler(entrada);7. EscritorBuffer.escreve(saida, s);8. }9. }
04/11/2008
11
Aplicação Gráfica
� Podemos usar o método de leitura de um arquivo texto e colocarmos o conteúdo deste arquivo em uma janela de texto.
� Conforme o exemplo
LeitorSwing.java1. import java.awt.Container;2. import java.io.File;3. import javax.swing.JFrame;4. import javax.swing.JScrollPane;5. import javax.swing.JTextArea;
6. public class LeitorSwing {7. public static void main(String[] args) {8. JFrame frame = new JFrame(“Curso CEFET/GENIUS");9. JTextArea textArea = new JTextArea();10. JScrollPane scrollPane = new JScrollPane(textArea); 11. Container container = frame.getContentPane();12. container.add(scrollPane);13. frame.setSize(500, 400);14. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);15. frame.setVisible(true);16.
17. File arquivo = new File("MeuTexto.txt");18. String s = LeitorBuffer.ler(arquivo);19. textArea.append ( s );20. }21. }
04/11/2008
12
Exercicio1. Melhorar o exemplo do gráfico para :
Adicionar um JTextField para especificar o arquivo para abrir.Carregar o arquivo informado no JTextAreaAdicionar um botão para gravar as alterações do Texto.
2. Construa uma classe Contato com os atributos Nome, Endereco e Telefone. Crie os métodos de gets e sets para os atributos. Na classe principal faça um array de Contato efetue a digitação dos contatos. Após a digitação coloque os dados em um StringTokenizer usando o $ como delimitador e efetue a gravação no arquivo agenda.txt
3. Faça outro programa que vai utilizar a classe Contato criada na questão 2 e faça o processo de leitura da agenda carregando os dados do disco para o array. Imprima todos os dados na tela.
Serialização de Objetos
� Serialização de objeto – o mecanismo para ler ou gravar um objeto inteiro em um arquivo.
� Objeto serializado – o objeto representado como uma seqüência de bytes, incluindo os dados do objeto e as informações sobre o objeto.
� Desserialização – recria um objeto na memória a partir dos dados no arquivo.
04/11/2008
13
Serialização de Objetos (Cont)
� A serialização e a desserialização são realizadas com as classes ObjectInputStreams e ObjectOutputStream, métodos readObjects e writeObject.
Serialização de Objetos (Cont)� Interface Serializable – os programadores precisam
declarar uma classe para que possam implementar a interface Serializable ou os objetos dessa classe não poderão ser gravados em um arquivo.
� Para abrir um arquivo para gravar objetos, crie um FileOutputStream empacotado por um ObjectOutputStream.� FileOutputStream fornece os métodos para gravar a saída
baseada em bytes em um arquivo.� ObjectOutputStream utiliza FileOutputStream para gravar
objetos em um arquivo.� O método writeObject de ObjectOutputStream grava um
objeto no arquivo de saída.� O método close de ObjectOutputStream fecha os dois objetos.
04/11/2008
14
Classe Caixa.javaimport java.io.*;
public class Caixa implements Serializable {
private int altura, largura,profundidade;
public Caixa() {}
public void setAltura(int alt){altura=alt;}public void setLargura(int lar){largura=lar;}
...
Interface Serializable especifica que objetos Caixa podem ser gravados em um
arquivo
Classe CaixaSer.java – Serializa o objetoimport java.io.*;public class CaixaSer {
public static void main(String[] args) {Caixa caixa1 = new Caixa();caixa1.setAltura(10);caixa1.setLargura(20);caixa1.setProfundidade(30);
try{FileOutputStream fs=new FileOutputStream("caixa.ser");ObjectOutputStream os=new ObjectOutputStream(fs);os.writeObject(caixa1);os.close();
} catch (Exception ex){ex.printStackTrace();
}
}}
04/11/2008
15
Desserialização de Objetos
� Para abrir um arquivo a fim de ler objetos, crie um FileInputStream empacotado por um ObjectInputStream.� FileInputStream fornece os métodos para ler a entrada
baseada em bytes a partir de um arquivo.� ObjectInputStream utiliza FileInputStream para ler
os objetos em um arquivo.� O método readObject de ObjectInputStream lê um
objeto, que, então, sofre downcast para o tipo adequado.� EOFException ocorre se houver uma tentativa de ler depois do final
do arquivo.� ClassNotFoundException ocorre se a classe para o objeto sendo
lido não puder ser localizada.� O método close de ObjectInputStream fecha os dois
objetos.
Classe CaixaDes.java – Desserializa o objetopublic class CaixaDes {
public static void main(String[] args) {// TODO code application logic hereCaixa caixa1;Object geral;
try{FileInputStream fs=new FileInputStream("caixa.ser");ObjectInputStream os=new ObjectInputStream(fs);geral=os.readObject();
caixa1 = (Caixa) geral;System.out.printf("Largura: %d \n ",caixa1.getLargura());System.out.printf("Altura: %d \n ",caixa1.getAltura());System.out.printf("Profundidade: %d \n ",caixa1.getProfundidade());os.close();
} catch (Exception ex){ex.printStackTrace();
}}
}
04/11/2008
16
Exercicio
� Faça uma alteração no programa para gravar uma série de objetos Caixa com tamanhos diferentes.
� Depois faça um programa para deserializar os objetos caixas armazenados no arquivo e imprima a largura, altura e profundidade de cada um. Você pode usar a EOFExceptionpara detectar o fim do arquivo