21/05/2013 DCC / ICEx / UFMG Persistência de Dados Arquivos em Java Dados armazenados em variáveis e vetores são temporários São perdidos quando o programa termina Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Arquivos São estruturas de dados manipuladas fora do ambiente de programação Gravadas e acessadas Arquivos são persistentes Permanecem gravadas mesmo depois do programa ser finalizado Geralmente armazenados na memória secundária (exemplo: disco) Para persistência dos dados, é necessário usar arquivos Arquivos registram informações em memória secundária (disco) Utilização de Arquivos Persistência de dados Arquivos são usados quando os dados não podem ser perdidos após o programa ser encerrado (ou o computador ser desligado) Volume grande de dados Arquivos podem ser usados quando um grande volume de dados precisam ser guardados Stream (fluxo) e Serialização Arquivos em Java Stream são dados ordenados que são lidos ou gravados em um arquivo Os objeto precisar ser serializáveis para serem gravados em disco Enviar um objeto pela rede também usa serialização Objetos serializáveis implementam a interface Serializable (pacote java.io) 1 21/05/2013 Principais Classes (java.io) FileInputStream Recupera bytes a partir de um arquivo Grava bytes para um arquivo FileReader Recupera caracteres de um arquivo FileWriter Grava caracteres em um arquivo Exemplo: FileInfo public class FileInfo { Cria um objeto File a partir de public void analyzePath( String path ) { um caminho e verifica se o File name = new File( path ); arquivo ou diretório existe . if ( name.exists() ) { System.out.println(name.getName() + " exists"); System.out.println(name.isFile() ? "is a file" : "is not a file"); System.out.println(name.isDirectory() ? "is a directory" : "is not a directory"); System.out.println("Path: " + name.getPath()); System.out.println("Absolute path: " + name.getAbsolutePath()); System.out.println(); if ( name.isDirectory() ) { String[] directory = name.list(); System.out.println( "\n\nDirectory contents:\n" ); for ( String directoryName : directory ) Se não existe arquivo ou System.out.println( directoryName ); diretório com o nome, imprime } uma mensagem de erro. } else { System.out.println( path + " does not exist." ); } }} Exemplo: FileInfoTest public class FileInfoTest { Representação abstrata de um caminho para arquivo ou diretório O caminho String pode ser passado para o construtor da classe FileOutputStream import java.util.Scanner; Classe File Usuário entra com o nome de um arquivo ou diretório . public static void main( String[] args ) { Scanner input = new Scanner( System.in ); System.out.print( "Enter file or directory name: " ); String fileName = input.nextLine(); FileInfo fileInfo = new FileInfo(); fileInfo.analyzePath( fileName ); Alguns métodos principais exists() verifica se o arquivo/diretório existe isDirectory() verifica se é diretório isFile() verifica se é arquivo getName() retorna o nome do arquivo/diretório Exemplo: FileInfo public class FileInfo { public void analyzePath( String path ) { Se o arquivo existe, imprime o File file = new File( path ); nome e outras informações. if ( file.exists() ) { System.out.println(file.getName() + " exists"); System.out.println(file.isFile() ? "is a file" : "is not a file"); System.out.println(file.isDirectory() ? "is a directory" : "is not a directory"); System.out.println("Path: " + file.getPath()); System.out.println("Absolute path: " + file.getAbsolutePath()); System.out.println(); if ( file.isDirectory() ) { Se for um diretório, String[] directory = file.list(); imprime os nomes de System.out.println( "Directory contents:" ); arquivos e subdiretórios for ( String directoryName : directory ) deste diretório. System.out.println( directoryName ); } } else { System.out.println( path + " does not exist." ); } }} Bibliografia da Aula DEITEL, H. M.; DEITEL P. J. Java: Como Programar, 8a. Edição. Pearson, 2010. Capítulo 17 Arquivos, fluxos e serialização } } Cria um objeto FileInfo e pede para analisar o caminho . 2