ficheiros de texto - departamento de engenharia informáticanfreire/ficheiros de texto -...
Post on 23-Sep-2019
8 Views
Preview:
TRANSCRIPT
Nelson Freire (ISEP–DEI-APROG 2014/15) 1/18
Ficheiros de Texto Java
Algoritmia e Programação APROG
Nelson Freire (ISEP–DEI-APROG 2014/15) 2/18
Estrutura de Dados
Armazena
Sequência de Dados
Comprimento arbitrário
Dados de tipos diferentes
Modo Permanente // em memória secundária
Noção de Ficheiro Ficheiros de Texto
Memória Secundária (Disco Interno)
Memória Secundária (PenDrive, Disco Externo, CD, DVD)
Processador (CPU)
Memória Principal (RAM)
Dado 1 Dado 2 ... Dado N
Nelson Freire (ISEP–DEI-APROG 2014/15) 3/18
Tipos de Ficheiros
Tipos de Ficheiros
Ficheiro Texto
Programa
Ficheiro Binário
Tipos de
Ficheiros Sequência
Formato dos
Dados
Processadores de
Texto Interesse
Texto Carateres
(Codificação baseada em tabelas de carateres, por exemplo: ASCII, Unicode (UTF-8, ...), etc.)
Texto Legível Guardar Dados
Públicos
Binário Códigos Binários Binário Ilegível Guardar Dados
Privados
APROG aborda apenas os ficheiros de texto
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 4/18
Tipos
Leitura
Escrita
Operações sobre Ficheiros Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 5/18
Procedimento
1. Abrir Ficheiro // recursos do Sistema Operativo alocados para a leitura do ficheiro
// Ex: buffers (memória temporária)
2. Ler Ficheiro
3. Fechar Ficheiro // libertar recursos alocados
Leitura de Ficheiro de Texto 1/4 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 6/18
Abrir Ficheiro
Classes File // package java.io Scanner // package java.util
Objeto Scanner ... para ler
Exemplos
import java.io.File;
import java.util.Scanner;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
File f = new File("c:\\nomes.txt");
Scanner fich1 = new Scanner( f ); ...
Scanner fich2 = new Scanner(new File("c:/equipas.txt"));
Scanner fich3 = new Scanner(new File("c:\\jogos.txt"));
Scanner fich4 = new Scanner(new File("d:\\aprog\\int.txt"));
Scanner fich5 = new Scanner(new File("notas.txt")); // ficheiro na pasta do projeto Netbeans
... } }
Alternativa: Scanner fich1 = new Scanner( new File("c:\\nomes.txt") );
Leitura de Ficheiro de Texto 2/4 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 7/18
Ler Ficheiro
Ler uma Palavra
String palavra = objetoScanner.next();
Ler uma Linha
String linha = objetoScanner.nextLine();
Ler todas as linhas
Ler linha-a-linha ... até ao fim do ficheiro
Indicação do fim do ficheiro
objetoScanner.hasNextLine() == false
import java.io.File; import java.util.Scanner;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
Scanner fich = new Scanner(new File(" c:\\nomes.txt "));
// leitura de ficheiro linha-a-linha while ( fich.hasNextLine() ){ System.out.println( fich.nextLine() ); } ... } }
Leitura de Ficheiro de Texto 3/4 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 8/18
Fechar Ficheiro
objetoScanner.close();
Exemplo
import java.io.File; import java.util.Scanner;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
Scanner fich = new Scanner( new File(" c:\\nomes.txt ") );
// leitura de ficheiro linha-a-linha while ( fich.hasNextLine() ){ System.out.println( fich.nextLine() ); }
fich.close(); } }
Leitura de Ficheiro de Texto 4/4 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 9/18
Interesse
Decompor uma string em partes separadas por delimitadores: iguais ou diferentes
Exemplo: Delimitadores Iguais
String registo = "joão/1961/10/1";
Obtenção dos campos do registo (partes da string)
String[] campos; // vetor para guardar partes da string registo (campos)
campos = registo.split("/"); // 1. Decompõe o registo pelo delimitador /
// 2. Cria um vetor de strings (comprimento = nº partes)
// 3. Guarda as partes (substrings) em elementos diferentes Resultado
Exemplo: Delimitadores Diferentes
Delimitador
"joão" "1961" "10" "1" campos
0 1 2 3
Classe String : método split 1/6
String s = "5-6+7-8";
String[] c = s.split("[+-]");
// c[0]="5", c[1]="6", c[2]="7", c[3]="8"
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 10/18
Exemplo de um programa que:
Lê ficheiro de texto, chamado notas, contendo nomes e notas de alunos separados por um traço
Escreve noutro ficheiro de texto, chamado medias, os nomes dos alunos e as respetivas médias por ordem decrescente e separados por espaços
Classe String : método split 2/6 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 11/18
Classe String : método split 3/6
import java.io.File;
import java.util.*;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
int n = numAlunos();
float[] medias = new float[n];
String[] nomes = new String[n];
preencherVetores(nomes, medias);
ordenarVetores(nomes,medias);
escreverFicheiro(nomes,medias);
}
private static int numAlunos() throws Exception {
int n = 0;
Scanner fich = new Scanner(new File("notas"));
while (fich.hasNextLine()) {
n++;
fich.nextLine();
}
fich.close();
return n;
}
continua
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 12/18
private static void ordenarVetores(String[] nomes, float[] med) {
for (int i = 0; i < med.length-1; i++) {
for (int j = i+1; j < med.length; j++) {
if(med[j]>med[i]){
float tmp = med[i];
med[i]= med[j];
med[j]=tmp;
String tmp2 = nomes[i];
nomes[i]=nomes[j];
nomes[j]=tmp2;
}
}
}
}
Classe String : método split 4/6
continua
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 13/18
private static void preencherVetores( String[] nomes, float[] med ) throws Exception {
Scanner fich = new Scanner(new File("notas"));
int i=0;
while (fich.hasNextLine()) {
// lê e guarda a linha seguinte
String linha = fin.nextLine();
// decompõe a linha em partes delimitadas por -
String[] partes = linha.split("-");
nomes[i] = partes[0];
int soma = 0;
for (int j = 1; j < partes.length; j++) {
soma += Integer.parseInt(partes[j]);
}
med[i]=(float)soma/(partes.length-1);
i++;
}
fin.close();
}
Classe String : método split 5/6
continua
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 14/18
private static void escreverFicheiro(String[] nomes, float[] med) throws Exception {
Formatter fich = new Formatter(new File("medias"));
for (int i = 0; i < med.length; i++) {
fich.format("%-10s %.1f%n", nomes[i],med[i]);
}
fich.close();
}
}
Classe String : método split 6/6 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 15/18
Procedimento
1. Abrir Ficheiro // recursos do Sistema Operativo alocados para a leitura do ficheiro
// Ex: buffers (memória temporária)
2. Escrever no Ficheiro
3. Fechar Ficheiro // libertar recursos alocados
Escrita em Ficheiro de Texto 1/4 Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 16/18
Abrir Ficheiro
Classes File // package java.io Formatter // package java.util
Objeto Formatter ... para escrever
Exemplos
Escrita em Ficheiro de Texto 2/4
import java.io.File;
import java.util.Formatter;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
File f = new File("c:\\nomes.txt");
Formatter fich1 = new Formatter( f ); ...
Formatter fich2 = new Formatter( new File("c:/equipas.txt") );
Formatter fich3 = new Formatter( new File("c:\\jogos.txt") );
Formatter fich4 = new Formatter( new File("d:\\aprog\\int.txt") );
Formatter fich5 = new Formatter( new File("numeros.txt") ); // ficheiro na pasta do projeto Netbeans
... } }
Alternativa: Formatter fich1 = new Formatter ( new File("c:\\nomes.txt") );
criado sempre novo ficheiro
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 17/18
Escrever no Ficheiro
Método format do objeto Formatter
objetoFormatter.format(String format, args);
Permite escrita formatada
Semelhante ao System.out.printf() e String.format()
Detalhes nos slides Java - Classes
Escrita em Ficheiro de Texto 3/4
import java.io.File; import java.util.Formatter;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
// ficheiro na pasta do projeto Netbeans
Formatter fich = new Formatter ( new File("numeros.txt") );
// escreve 10 linhas
for(int i =1; i<11; i++){
fich.format("%d%n", (int)(Math.random()*10));
}
... } }
Ficheiros de Texto
Nelson Freire (ISEP–DEI-APROG 2014/15) 18/18
Fechar Ficheiro
objetoFormatter.close();
Exemplo
Escrita em Ficheiro de Texto 4/4
import java.io.File; import java.util.Formatter;
public class DemoFicheiro {
public static void main(String[] args) throws Exception {
// ficheiro na pasta do projeto Netbeans
Formatter fich = new Formatter ( new File("numeros.txt") );
// escreve 10 linhas
for(int i =1; i<11; i++){
fich.format("%d%n", (int)(Math.random()*10));
}
fich.close(); } }
Ficheiros de Texto
top related