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 . • Um arquivo é uma abstração utilizada para uniformizar a interação entre o ambiente de execução e os dispositivos externos. • 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. .

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

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

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

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

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

Arquivos Classes FileInputStream. FileReader.Linguagem Java Entrada e Saída de Dados . InputStreamReader é um filtro que converte bytes em chars. . um arquivo não é suportada pela classe File. 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. ou para. FileOutputStream.

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful