Capítulo 8 Ficheiros de texto Ler ficheiros de texto

Propaganda
Capítulo 8
Ficheiros de texto
Ler e escrever em ficheiros de texto
Ler ficheiros de texto
• A forma mais simples de ler texto é usar a classe Scanner
• Para ler de um ficheiro do disco, cria-se um objecto da classe FileReader
• Depois, usa-se o FileReader para criar um objecto Scanner
FileReader reader = new FileReader("input.txt");
Scanner in = new Scanner(reader);
• Para ler a informação, utilizam-se os métodos da classe Scanner:
• next, nextLine, nextInt e nextDouble
Introdução à Programação
2007/08
A. Lopes
Escrever ficheiros de texto
• Para escrever num ficheiro, cria-se um objecto da classe PrintWriter
PrintWriter out = new PrintWriter("output.txt");
• Se o ficheiro já existe, o seu conteúdo é apagado antes das novas
operações de escrita. Se o ficheiro não existe, então é criado um ficheiro
vazio
• Usa-se print e println para escrever num objecto PrintWriter
out.println(29.95);
out.println("Hello, World!");
• O ficheiro deve ser fechado após o respectivo processamento. Senão, a
informação pode não ser escrita no ficheiro
out.close();
Introdução à Programação
2007/08
A. Lopes
Um exemplo
• Ler todas as linhas de um ficheiro e enviar para o ficheiro de saída,
precedidas pelo número de linha (o programa pode ser usado para
numerar linhas em ficheiros .java)
Mary had a little lamb
Whose fleece was white as snow.
And everywhere that Mary went,
The lamb was sure to go!
/*
/*
/*
/*
Introdução à Programação
1
2
3
4
*/
*/
*/
*/
Mary had a little lamb
Whose fleece was white as snow.
And everywhere that Mary went,
The lamb was sure to go!
2007/08
A. Lopes
Ficheiro LineNumberer.java
import
import
import
import
java.io.FileReader;
java.io.IOException;
java.io.PrintWriter;
java.util.Scanner;
public class LineNumberer
{
! public static void main(String[] args) {
! ! Scanner console = new Scanner(System.in);
! ! System.out.print("Input file: ");
! ! String inputFilename = console.next();
! ! System.out.print("Output file: ");
! ! String outputFilename = console.next();
try
! ! {
! ! ! FileReader reader = new FileReader(inputFilename);
! ! ! Scanner in = new Scanner(reader);
! ! ! PrintWriter
out = new2007/08
PrintWriter(outputFilename);
Introdução à Programação
A. Lopes
Ficheiro LineNumberer.java
! ! ! int lineNumber = 1;
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
! ! out.close();
! }
! catch (IOException exception)
! {
! ! System.out.println("Error in file processing: " + exception);
! }
}
}
!
!
!
!
!
!
while (in.hasNextLine())
{
! String line = in.nextLine();
! out.println("/* " + lineNumber + " */ " + line);
! lineNumber++;
}
Introdução à Programação
2007/08
A. Lopes
Caixas de diálogo
uma caixa de diálogo JFileChooser
Introdução à Programação
2007/08
A. Lopes
Caixas de diálogo
JFileChooser chooser = new JFileChooser();
FileReader reader = null;
Scanner in;
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
{
File selectedFile = chooser.getSelectedFile();
reader = new FileReader(selectedFile);
in = new Scanner(reader);
...
}
Informação adicional em:
http://java.sun.com/docs/books/tutorial/uiswing/components/
filechooser.html
Introdução à Programação
2007/08
A. Lopes
Manipulação de texto
• Texto: sequência de caracteres
• por exemplo, o número 12,345 é guardado com os caracteres '1' '2' ','
'3' '4' '5'
• Utilizam-se objectos FileReader e FileWriter para processar leitura e escrita
• Para ler:
FileReader reader = new FileReader("input.txt");
// ... char ch = (char) reader.read();
• Para escrever:
FileWriter writer = new FileWriter("output.txt");
// ... writer.write(ch);
Introdução à Programação
2007/08
A. Lopes
Ler carácter a carácter
• Utilizar o método read de FileReader para ler um único carácter
• devolve o próximo carácter como um int
• ou o carácter -1 no fim do ficheiro
FileReader reader = ...;
int next;
char c;
while ((next = reader.read()) != -1)
{
c = (char) next;
….
}
Introdução à Programação
2007/08
A. Lopes
Ficheiros
outros conceitos a estudar no futuro
• Para além do formato texto, existe também o formato binário
• Há a possibilidade de o acesso a ficheiros ser aleatório
Acesso sequencial
Acesso aleatório
Introdução à Programação
2007/08
A. Lopes
Download