Baixe Persistencia e outras Notas de estudo em PDF para Informática, somente na Docsity!
Arquivos e fluxos
OBJETIVOS
Neste capítulo, você aprenderá:
Como criar, ler, gravar e atualizar arquivos.
Como utilizar a classe File para recuperar informações sobre
arquivos e diretórios.
A hierarquia de classes para fluxo de entrada/saída do Java.
As diferenças entre arquivos de texto e arquivos binários.
Processamento de arquivos de acesso seqüencial e de acesso
aleatório.
Como utilizar as classes Scanner e Formatter para
processar arquivos de texto.
Como utilizar as classes FileInputStream e
FileOutputStream.
Como utilizar um diálogo de JFileChooser.
Como utilizar as classes FileInputStream e
FileOutputStream.
Como utilizar a classe RandomAccessFile.
14.6 Serialização de objeto
14.6.1 Criando um arquivo de acesso seqüencial com a
serialização de objeto
14.6.2 Lendo e desserializando dados a partir de um
arquivo de acesso seqüencial
14.7 Arquivos de acesso aleatório
14.7.1 Criando um arquivo de acesso aleatório
14.7.2 Gravando dados aleatoriamente em um arquivo de
acesso aleatório
14.7.3 Lendo dados seqüencialmente de um arquivo de
acesso aleatório
14.7.4 Estudo de caso: Um programa de processamento
de transação
14.8 Classes java.io adicionais
14.9 Abrindo arquivos com JFileChooser
14.10 Conclusão
14.1 Introdução
- O armazenamento dos dados em variáveis e arrays é temporário.
- Computadores utilizam arquivos para armazenamento de longo prazo de grandes volumes de dados, mesmo depois de os programas que criaram os dados terminarem.
- Dados persistentes – existem além da duração da execução do programa.
- Arquivos armazenados nos dispositivos de armazenamento secundários****.
- Fluxo – dados ordenados lidos de ou gravados em um arquivo.
14.2 Hierarquia de dados
- Um campo – um grupo de caracteres ou bytes que carregam um significado.
- Registro – um grupo de campos relacionados.
- Arquivo – um grupo de registros relacionados.
- Os itens de dados processados pelos computadores formam uma hierarquia de dados que se torna maior e mais complexa partindo dos bits até os arquivos.
- Chave de registro – identifica um registro como pertencente a uma pessoa ou entidade particular – utilizada para fácil recuperação de registros específicos.
- Arquivo seqüencial – arquivo em que os registros são armazenados pela ordem do campo chave de registro.
- Banco de dados – um grupo de arquivos relacionados.
- Sistema de gerenciamento de bancos de dados – uma coleção dos programas projetada para criar e gerenciar bancos de dados.
Figura 14.1 | Hierarquia de dados.
14.3 Arquivos e fluxos
- Fluxos de arquivos:
- Fluxos baseados em bytes – representam dados no formato binário.
- Arquivos binários – criados a partir de fluxos baseados em bytes, lidos por
um programa que converte os dados em formato legível por humanos.
- Fluxos baseados em caracteres – armazenam os dados como uma seqüência de caracteres. - Arquivos de texto – criados a partir de fluxos baseados em caracteres, eles
podem ser lidos por editores de textos.
- O Java abre o arquivo criando um objeto e associando um fluxo a ele.
- Fluxos-padrão – cada fluxo pode ser redirecionado:
- System.in – objeto do fluxo de entrada-padrão, ele pode ser redirecionado com o método setIn.
- System.out – objeto do fluxo de saída-padrão, ele pode ser redirecionado com o método setOut.
- System.err – objeto do fluxo de erro-padrão, ele pode ser redirecionado com o método setErr.
14.3 Arquivos e fluxos ( Cont. )
- Classes java. io :
- FileInputStream e FileOutputStream – E / S baseada em bytes.
- FileReader e FileWriter – E / S baseada em caracteres.
- ObjectInputStream e ObjectOutputStream – os objetos dessas classes podem ser utilizados para E/S de objetos ou variáveis de tipos de dados primitivos.
- File – útil para obter informações sobre arquivos e diretórios.
- Classes Scanner e Formatter
- Scanner – pode ser utilizada para ler facilmente os dados em um arquivo.
- Formatter – pode ser utilizada para gravar facilmente dados em um arquivo.
14.4 Classe File
- Classe File – útil para recuperar informações sobre arquivos e diretórios no disco.
- Os objetos da classe File não abrem arquivos nem fornecem capacidades de processamento de arquivos.
Criando objetos File
- A classe File fornece quatro construtores:
1. Recebe String que especifica nome e caminho
(localização do arquivo no disco).
2. Recebe duas String s: a primeira especificando o
caminho e a segunda especificando o nome do arquivo.
3. Recebe o objeto File que especifica o caminho e String
que especifica o nome do arquivo.
4. Recebe o objeto URI que especifica o nome e a localização
do arquivo.
- Diferentes tipos de caminhos:
- Caminho absoluto – contém todos os diretórios desde o
diretório-raiz que levam a um arquivo ou diretório
específico.
- Caminho relativo – normalmente inicia do diretório em
que o aplicativo começou a execução.
Figura14.3 | Métodos File.
(Parte 2 de 2.)
Método Descrição String getAbsolutePath() Retorna uma string com o caminho absoluto do arquivo ou diretório. String getName() Retorna uma string com o nome do arquivo ou diretório. String getPath() Retorna uma string com o caminho do arquivo ou diretório. String getParent() Retorna uma string com o diretório-pai do arquivo ou diretório (isto é, o diretório em que o arquivo ou diretório pode ser localizado). long length() Retorna o comprimento do arquivo, em bytes. Se o objeto File representar um diretório, 0 é retornado. long lastModified() Retorna uma representação dependente de plataforma da data/hora em que o arquivo ou diretório for modificado pela última vez. O valor retornado é útil somente para comparação com outros valores retornados por esse método. String[] list() Retorna um array de strings que representam o conteúdo de um diretório. Retorna null se o objeto File não representar um diretório.
Dica de prevenção de erro 14.
O método File utiliza isFile para determinar se um objeto File representa um arquivo (não um diretório) antes de tentar abrir o arquivo.
Resumo
FileDemonstration
.java
(1 de 2)
1 // Fig. 14.4: FileDemonstration.java 2 // Demonstrando a classe File. 3 import java.io.File; 4 5 public class FileDemonstration 6 { 7 // exibe informações sobre o arquivo que o usuário especifica 8 public void analyzePath( String path ) 9 { 10 // cria o objeto File com base na entrada de usuário 11 File name = new File( path ); 12 13 if ( name.exists() ) // se o nome existir, gera saída das informações sobre ele 14 { 15 // exibe informações sobre o arquivo (ou diretório) 16 System.out.printf( 17 "%s%s\n%s\n%s\n%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s", 18 name.getName(), " exists", 19 ( name.isFile()? "is a file" : "is not a file" ), 20 ( name.isDirectory()? "is a directory" : 21 "is not a directory" ), 22 ( name.isAbsolute()? "is absolute path" : 23 "is not absolute path" ), "Last modified: ", 24 name.lastModified(), "Length: ", name.length(), 25 "Path: ", name.getPath(), "Absolute path: ", 26 name.getAbsolutePath(), "Parent: ", name.getParent() ); 27
Retorna true se o arquivo ou
diretório especificado existir
Recupera o nome do arquivo ou
diretório
Retorna true se name for
um arquivo, não um
diretório
Retorna true se name for
um diretório, não um
Retorna true arquivo se path for
um caminho absoluto
Recupera a data/hora da
última modificação em um
arquivo ou diretório (valor
dependente do sistema)
Recupera o comprimento em
bytes do arquivo
Recupera o caminho inserido como
uma string
Recupera o caminho absoluto do arquivo
ou diretório
Cria um novo objeto File; o
usuário especifica o nome de
arquivo e caminho
Recupera o diretório-pai
(caminho onde o arquivo ou
diretório do objeto File ou
pode ser localizado)
Resumo FileDemonstration .java
(2 de 2)
28 if ( name.isDirectory() ) // gera listagem de diretório 29 { 30 String directory[] = name.list(); 31 System.out.println( "\n\nDirectory contents:\n" ); 32 33 for ( String directoryName : directory ) 34 System.out.printf( "%s\n", directoryName ); 35 } // fim de 36 } // fim do if externo 37 else // não for arquivo ou diretório, gera saída da mensagem de erro 38 { 39 System.out.printf( "%s %s", path, "does not exist." ); 40 } // fim de else 41 } // fim do método analyzePath 42 } // fim da classe FileDemonstration
Retorna true se File for um diretório, não
um arquivo
Recupera e exibe o
conteúdo do diretório