Você está na página 1de 29






• O armazenamento de dados em variáveis, arrays, coleções ou qualquer outra estrutura
de dados em memória é temporário;

• Os dados são perdidos quando uma variável(ou objeto) local “sai do escopo” ou
quando o programa termina;

• Os arquivos são utilizados para persistência de dados a longo prazo, mesmo depois
que o programa termine;

• Estes dados são armazenados em dispositivos de armazenamento secundário como


discos magnéticos, discos ópticos, etc;
• É sempre aconselhada a estruturação das informações persistidas em arquivos;

• Um arquivo é composto por campos, que nada mais são do que um conjunto de
caracteres ou bytes que transmitem uma informação:
• Vários campos compõem um registro - pode ser implementado como uma classe
Java;
• Um arquivo é portanto um conjunto de registros;

Campo 1 Campo 2 Campo 3 Campo n Arquivo

Campo 1 Campo 2 Campo 3 Campo n Registro

Campo 1 Campo 2 Campo 3 Campo n Campo


• Uma das principais facilidades do Java, em comparação com outras linguagem de
programação, é a facilidade na leitura/gravação de arquivos no sistema operacional;

• Sendo Java uma linguagem O.O., nada mais claro que utilizar classes e instâncias delas
- objetos - para lidar com a entrada/saída (I/O – Input/Output) de dados;

• Não é necessário se preocupar com o sistema operacional no qual sua aplicação está
rodando;

• As classes para I/O do Java isolam os programadores de detalhes específicos do


sistema operacional sobre o qual o programa irá rodar;
STREAMS (FLUXOS)
• Todas as entradas e saídas em Java são definidas em termos de fluxos (streams);

• Streams são sequências ordenadas de dados que têm uma fonte, no caso de
streams de entradas, ou um destino, no caso de streams de saída;
• Em outras palavras, uma stream é uma a conexão para uma fonte de dados ou
para um destino de dados, ou para ambos;

• O Java trata cada arquivo como um stream;


Output stream
Programa Arquivo
(quero gravar)

Input stream
Programa Arquivo
(quero ler)
• Arquivos baseados em um fluxo de caracteres são arquivos textos e arquivos
baseados em um fluxo de bytes são arquivos binários;

• Stream de texto – arquivo texto

Programa T e x t o s a í d a Arquivo

• Stream de bytes – arquivo binário

Programa 1000101 010010 1001001 0100101 010001 0101010 0001001 0100101


Arquivo
Pró Contras
Não é eficiênte em termos de
Pode ser lido e entendido por
Arquivo Texto pessoas
tempo, tamanho e performance
da máquina no processamento
Eficiênte em termos de tempo,
Difícil de ser entendido por
Arquivo Binário tamanho e performance da
pessoas
máquina no processamento
• Arquivos texto são os mais simples possível;
• Podem ser utilizados facilmente por diversos programas, pois é fácil saber a disposição
dos registros e campos contidos nestes arquivos;
• Geralmente os registros nestes arquivos são representados pelas linhas, enquanto os
campos por colunas ou valores separados por vírgula (.csv);
• Basicamente, para gravar dados num arquivo texto, é preciso executar três passos:
- Abrir o arquivo;
- Usar o arquivo (gravar os dados);
- Fechar o arquivo;

• Para escrita sequencial de arquivos as seguintes classes podem ser utilizadas:


- java.io.FileWriter (OutputStream);
- java.io.PrintWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class EscritaArquivo {

public static void main(String[] args) {


try {
FileWriter outputStream = new FileWriter("exemplo.txt");
PrintWriter arquivoSaida = new PrintWriter(outputStream);

arquivoSaida.print("Teste");
arquivoSaida.print("Conteúdo do arquivo");

arquivoSaida.close();
outputStream.close();

} catch (IOException e) {
e.printStackTrace();
}
}

}
• Basicamente, para ler dados de um arquivo texto, é preciso executar três passos:
- Abrir o arquivo;
- Usar o arquivo (ler os dados);
- Fechar o arquivo;

• Para leitura sequencial de arquivos as seguintes classes podem ser utilizadas:


- java.io.FileReader (InputStream);
- java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LeituraArquivo {

public static void main(String[] args) {


try {
FileReader inputStream = new FileReader("exemplo.txt");
BufferedReader arquivoEntrada = new BufferedReader(inputStream);

String linha;
while ((linha = arquivoEntrada.readLine()) != null) {
System.out.println(linha);
}

arquivoEntrada.close();
inputStream.close();

} catch (IOException e) {
e.printStackTrace();
}
}

}
• O Java oferece várias implementações
para leitura/escrita de arquivos texto;

• Cada implementação é destinada a uma


aplicação
específica, verifique as classes do pacote
java.io para
mais informações;
• Representa um arquivo - ou diretório - no sistema de arquivos nativo.
• Permite obter informações sobre arquivos e diretórios;
• Instâncias da classe java.io.File representam caminhos(paths) para possíveis arquivos
ou diretórios no sistema operacional;
• Um objeto desta classe apenas representa um arquivo ou diretório, isto não quer
dizer que o arquivo ou diretório exista de fato;
• Objetos desta classe não são utilizados para ler ou gravar dados nos arquivos;
• É utilizado principalmente para executar operações como criar, renomear, apagar
arquivos e diretórios e checar permissões de acesso;
Método Descrição
exists Verifica se um arquivo ou diretório existe
isDirectory Verifica se é um diretório
isFile Verifica se é um arquivo
canRead Verifica se pode ser lido
canWrite Verifica se pode ser gravado
mkdir Cria um diretório
renameTo Renomeia um arquivo ou diretório
length Retorna o tamanho do arquivo
delete Deleta um arquivo ou diretório
getPath Retorna o caminho
createNewFile Cria um novo arquivo
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class ExemploArquivo {

public static void main(String[] args) {


try {
File arquivo = new File("texto.txt");

if (!arquivo.exists()) //verifica se o arquivo existe


arquivo.createNewFile(); //cria um novo arquivo

FileWriter inputStream = new FileWriter(arquivo);


//.... escreve no arquivo

} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.IOException;

public class ExemploArquivo {

public static void main(String[] args) {


try {
File diretorio = new File("textos");

if (!diretorio.exists()) //verifica se o diretório existe


diretorio.mkdir(); //cria o diretório

//Arquivo com o diretório


File arquivo = new File(diretorio, "texto.txt");

if (!arquivo.exists())
arquivo.createNewFile();

} catch (IOException e) {
e.printStackTrace();
}
}
}
• A classe StringBuffer representa uma sequência de caracteres não constante
(diferente de String que é constante);
• Sendo assim é possível a alteração de caracteres de objetos desta classe sem a
realocação de outro objeto;

Método Descrição
append Acrescenta um valor ao final da sequência
delete Remove caracteres da sequência
deleteCharAt Remove um caractere da sequência
insert Insere um valor em determinada posição da sequência
replace Substitui um caractere da sequência
setCharAt Substitui um caractere da sequência
reverse Inverte a sequência de caracteres
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LeituraArquivo {

public static void main(String[] args) {


try {
FileReader inputStream = new FileReader("exemplo.txt");
BufferedReader arquivoEntrada = new BufferedReader(inputStream);

String linha;
StringBuffer texto = new StringBuffer();

while ((linha = arquivoEntrada.readLine()) != null)


texto.append(linha).append("\n");

System.out.println(texto);
arquivoEntrada.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1. Crie um programa em Java para ler um arquivo texto e
escrever apenas os caracteres alfabéticos(letras) e o espaço para
um arquivo de destino. Números e caracteres especiais devem
ser desconsiderados.
2. Crie um programa em Java para ler um arquivo texto, onde cada
linha contém dois números inteiros separados por vírgula. Este
programa deve utilizar o arquivo de entrada citado acima para
gerar um arquivo com 3 campos, sendo o terceiro o valor da soma
dos outros dois citados anteriormente.
“Somos o que repetidamente fazemos. Portanto, a excelência não é um
feito, é um hábito”. (Aristóteles)

Você também pode gostar