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

.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.Arquivos Arquivos • Outro dispositivo de entrada e saída de vital importância é disco manipulado através do conceito de arquivo. • Um arquivo é uma abstração utilizada para uniformizar a interação entre o ambiente de execução e os dispositivos externos.

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

public boolean mkdir(). public boolean delete().Linguagem Java Entrada e Saída de Dados . retorna se é um diretório public String getAbsolutePath().Arquivos Class File Alguns métodos public String getParent(). retorna o caminho absoluto (path) . 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(). public long length(). public boolean isFile(). public list(). public String getName(). public String getPath().

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

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

Writer como pode ser visto na figura. FileOutputStream. FileReader. 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 .Linguagem Java Entrada e Saída de Dados . OutputStream. Reader.Arquivos Class FileInputStream.

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. FileWriter As funcionalidades de transferência seqüencial de dados a partir de. um arquivo não é suportada pela classe File.Linguagem Java Entrada e Saída de Dados . ou para.Arquivos Classes FileInputStream. FileOutputStream. InputStreamReader é um filtro que converte bytes em chars. . FileReader.

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

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

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. in.Arquivos Exemplo : Leitura seqüencial de Arquivo .out. if (linha==null){ continua=false. . while(continua){ linha = bf.txt"). InputStreamReader conversor = new InputStreamReader(in).close().println(linha). BufferedReader bf = new BufferedReader(conversor).close(). } } bf.readLine(). boolean continua=true. FileInputStream in = new FileInputStream(arquivo).Linguagem Java Entrada e Saída de Dados . String linha. }else{ System.

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

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

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

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

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

Serializable. .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. Neste caso o objeto deve declarar implementar java.io. •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.Linguagem Java Entrada e Saída de Dados .

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

Sign up to vote on this title
UsefulNot useful