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. .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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful