Linguagem Java Entrada e Saída de Dados - Arquivos

Especialização Avançada em Sistemas Distribuídos - EASD

Módulo VIII – Linguagem Java Entrada e Saída de Dados Arquivos
Marcela Santana e Sérgio Gorender Universidade Federal da Bahia

Arquivos Arquivos • Outro dispositivo de entrada e saída de vital importância é disco manipulado através do conceito de arquivo. .Linguagem Java Entrada e Saída de Dados . • A interação de um programa com um dispositivo através de arquivos passa por três etapas: abertura ou criação de um arquivo transferência de dados fechamento do arquivo • Em java a classe File permite representar arquivos neste nível de abstração. • Um arquivo é uma abstração utilizada para uniformizar a interação entre o ambiente de execução e os dispositivos externos.

para definir permissões (nos S. .s onde for aplicável). É apenas uma abstração . criar diretórios. listar o conteúdo de diretórios. para apagar arquivos.O. • Contém métodos para testar a existência de arquivos.Arquivos Class File • Usada para representar o sistema de arquivos. etc.a existência de um objeto File não significa a existência de um arquivo ou diretório.Linguagem Java Entrada e Saída de Dados .

public list().Arquivos Class File Alguns métodos public String getParent(). retorna o diretório (objeto File) pai retorna lista de arquivos contidos no diretório retorna se é um arquivo tenta apagar o diretório ou arquivo retorna o tamanho do arquivo em bytes cria um diretório com o nome do arquivo public boolean isDirectory(). retorna o caminho absoluto (path) . public String getPath(). retorna se é um diretório public String getAbsolutePath(). public String getName(). public boolean isFile(). public long length(). public boolean delete().Linguagem Java Entrada e Saída de Dados . public boolean mkdir().

i++) { File filho = new File( diretorio. diretorio. subdir1. } } Os diretórios e o arquivo serão criados c:\novo\subdir1 c:\novo\subdir2 c:\novo\arquivoVazio.txt"). // cria.length. println(filho. File arquivo = new File( diretorio. subdir2. "subdir2").File File diretorio = new File("c:\\novo").close().Linguagem Java Entrada e Saída de Dados .Arquivos Exemplo: Criação de Diretórios e de um Arquivo Vazio. se possível File subdir1 = new File( diretorio. FileWriter f = new FileWriter(arquivo).mkdir(). list(). mkdir().txt . arquivos[ i]). System. "arquivoVazio. out.getAbsolutePath()). File subdir2 = new File( diretorio.i<arquivos. for (int i =0. mkdir(). "subdir1"). String[] arquivos = diretorio. f.

como bytes. palavra por palavra. fluxos de bytes e caracteres • Dois grupos: Entrada e Saída de bytes: InputStream e OutputStream. .Linguagem Java Entrada e Saída de Dados . •APIs Java para I/O oferecem objetos que abstraem fontes e destinos (nós).aleatoriamente. Entrada e Saída de caracteres (chars): Reader e Writer.Arquivos •Há várias formas diferentes de ler e escrever dados: seqüencialmente . como caracteres. linha por linha.

Arquivos Class FileInputStream. Writer como pode ser visto na figura.Linguagem Java Entrada e Saída de Dados . Reader. FileWriter Os arquivos são abertos criando-se objetos destas classes de fluxo que herdam de InputStream. Classes abstratas InputStream OutputStream Reader Writer FileInputStream FileOuputStream FileReader FileWriter Classes Concretas . FileOutputStream. OutputStream. FileReader.

Linguagem Java Entrada e Saída de Dados . FileWriter As funcionalidades de transferência seqüencial de dados a partir de.Arquivos Classes FileInputStream. ou para. InputStreamReader é um filtro que converte bytes em chars. FileReader. FileInputStream FileOutputStream FileReader FileWriter para entrada baseada em bytes de um arquivo para saída baseada em bytes de um arquivo para entrada baseada em caracteres de um arquivo para saída baseada em caracteres de um arquivo As classes acima oferecem pelo menos um construtor que recebe como argumento um objeto da classe File e implementam os métodos básicos de transferência de dados. um arquivo não é suportada pela classe File. . FileOutputStream.

txt c:\tmp\subdir . System. File subdir = new File( diretorio.FileOutputStream File diretorio = new File("c:\\tmp"). //O bloco de código acima } out.Linguagem Java Entrada e Saída de Dados . FileOutputStream out = new FileOutputStream(arquivo). out. println(filho. String[] arquivos = diretorio. i++) { File filho = new File( diretorio.mkdir().exists()) { arquivo. diretorio.length. for (int i =0. out. 'o'} ). 'i'.getAbsolutePath()).delete(). list(). "lixo. 'x'.close(). mkdir().write( new byte[]{ 'l'. arquivos[ i]).txt"). Associa ao arquivo um fluxo de saída c:\tmp\lixo. "subdir").i<arquivos. subdir. } if (arquivo.Arquivos Exemplo: Escrita seqüencial de Arquivo . File arquivo = new File( diretorio.

txt").FileOutputStream System. a=(byte)System.in.print("Digite o texto").Arquivos Exemplo: Escrita seqüencial de Arquivo . FileOutputStream f0 = new FileOutputStream("c:\\Saida0.Linguagem Java Entrada e Saída de Dados .read().write(a). Leitura de 1 byte do console while(a!='\n'){ padrão .teclado f0.txt terá o conteúdo } digitado no teclado. . byte a = (byte)System.read().out. Arquivo Saida0.in.

out.println(linha).Linguagem Java Entrada e Saída de Dados .txt"). } } bf.close().Arquivos Exemplo : Leitura seqüencial de Arquivo . }else{ System. while(continua){ linha = bf. in. boolean continua=true. if (linha==null){ continua=false.close(). .readLine(). FileInputStream in = new FileInputStream(arquivo). BufferedReader bf = new BufferedReader(conversor).FileInputStream Associa um filtro ao fluxo de entrada Cria um buffer para armazenar o conteúdo lido do arquivo Ana Paulo Graça Luis File arquivo = new File("c:\\listaAlunos. String linha. InputStreamReader conversor = new InputStreamReader(in).

do arquivo arq. while(linha !=null ){ System. String linha =in.FileWriter A maneira mais eficiente de ler um arquivo de texto é usar FileReader com um BufferedReader.close().out.Linguagem Java Entrada e Saída de Dados . use um FileWriter com um PrintWriter Exemplo: Leitura seqüencial de Arquivo .txt"). BufferedReader in =new BufferedReader(f).println(linha). Mostra na tela linha por linha linha =in. Para gravar.txt } in.Arquivos Exemplo: Escrita seqüencial de Arquivo – FileReader e Leitura seqüencial de Arquivo .readLine(). .readLine().FileReader FileReader f = new FileReader("c:\\arq.

Arquivos Exemplo: Gravação seqüencial de Arquivo . if (linha. . System.FileWriter InputStreamReader conversor = new InputStreamReader(System. PrintWriter out =new PrintWriter(f).txt").out. out. FileWriter f = new FileWriter("c:\\arq. }else{ Grava no out. BufferedReader bf = new BufferedReader(conversor).close().equals("fim")){ continua=false.println(linha).readLine(). boolean continua=true.close(). while(continua){ Lê do teclado linha = bf.in). String linha.println("Digite").Linguagem Java Entrada e Saída de Dados . arquivo } } bf.

você pode procurar por qualquer posição desejada dentro de um arquivo. • Construindo uma instância do RandomAccessFile. e então ler ou escrever um montante de dados desejados. se o arquivo não existir dispara uma exceção "FileNotFoundException". . • Construindo uma instância do RandomAccessFile no modo 'r'. e então ler ou escrever um montante desejado de dados. você pode procurar por qualquer posição desejada dentro de um arquivo. • Esta classe oferece acesso aleatório através do uso de um ponteiro.Linguagem Java Entrada e Saída de Dados .Arquivos Class RandomAccessFile • Construindo uma instância do RandomAccessFile. se o arquivo não existir um arquivo de tamanho zero é criado. • Construindo uma instância do RandomAccessFile no modo 'rw'.

out. Determina o tamanho máximo do arquivo while(i<obj. if(result==null){ break . int i=0. Ana Paulo i++.txt System. "rw"). } Lista de nomes de alunos de Alunos. Luis } Adolfo .readLine(). String result.println(result).Linguagem Java Entrada e Saída de Dados .length()){ result=obj.txt"). RandomAccessFile obj = new RandomAccessFile(fileName .leitura File fileName = new File("c:\\Alunos.Arquivos Class RandomAccessFile .

Grava no arquivo Alunos2Chamada if (linha. . RandomAccessFile obj = new RandomAccessFile(fileName . while(continua){ linha = bf. }else{ obj. int i=0.Linguagem Java Entrada e Saída de Dados . File fileName = new File("c:\\Alunos2Chamada. no teclado. String result. BufferedReader bf = new BufferedReader(conversor).readLine().Arquivos Class RandomAccessFile . } } obj. "rw"). String linha. boolean continua=true.txt").in).writeBytes(linha+"\n").equals("fim")){ os nomes de alunos que foram digitados continua=false.gravação InputStreamReader conversor = new InputStreamReader(System.close().

Linguagem Java Entrada e Saída de Dados . Neste caso o objeto deve declarar implementar java.io. .Serializable. •Um objeto que implementa a interface Serializable poderá ser gravado em qualquer stream usando o método writeObject() de ObjectOutputStream e poderá ser recuperado de qualquer stream usando o método readObject() de ObjectInputStream.Arquivos Serialização de objetos – interface Serializable Class ObjectOutputStream e ObjectInputStream •Java permite a gravação direta de objetos em disco ou seu envio através da rede.

getNome()). Leitura dos objetos a e System.txt").writeObject(a). File arquivo = new File("c:\\GuardaObjetos.out.readObject().Linguagem Java Entrada e Saída de Dados . gravados no arquivo Aluno segundo=(Aluno)objIn. serializados. b.writeObject(b).out. no arquivo GuardaObjetos FileInputStream fIn = new FileInputStream(arquivo). Gravação dos objetos a e b.readObject(). objOut. Guarda Objetos System. . objOut.println(primeiro. FileOutputStream fOut = new FileOutputStream(arquivo).getNome()).Arquivos Exemplo gravação e leitura de objetos serializados Aluno a = new Aluno("Mario"). ObjectOutputStream objOut = new ObjectOutputStream(fOut). Aluno primeiro=(Aluno)objIn. Aluno b = new Aluno("Alice"). ObjectInputStream objIn = new ObjectInputStream(fIn).println(segundo.