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. • 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.Linguagem Java Entrada e Saída de Dados .

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

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

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

. como caracteres. fluxos de bytes e caracteres • Dois grupos: Entrada e Saída de bytes: InputStream e OutputStream. palavra por palavra.aleatoriamente. como bytes. Entrada e Saída de caracteres (chars): Reader e Writer.Linguagem Java Entrada e Saída de Dados . •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 . linha por linha.

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

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

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

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

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

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

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

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

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

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

Linguagem Java Entrada e Saída de Dados .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.Serializable. .

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

Sign up to vote on this title
UsefulNot useful