Como criar e editar arquivos de texto de acesso sequencial em Java
Um arquivo de acesso sequencial é um arquivo no qual os dados (registros) são armazenados em ordem, por um campo registro-chave. Vamos criar nesta lição um arquivo de texto, incluindo escrita, leitura e edição de seu conteúdo.
Criar classe para manipular arquivo de texto
Para nosso exemplo vamos criar a classe CriarArquivoTexto, que irá usar um objeto Formatter para gerar Strings formatadas, da mesma forma que o método System.out.printf trabalha. E com ele criaremos ou abriremos um arquivo de texto que nomearemos como “arquivo.txt“.
Se o arquivo não existir, ele será criado; caso o arquivo já exista no sistema, ele será truncado, ou seja, todo o seu conteúdo será apagado e substituído pelo novo conteúdo digitado.
Exemplo
Vejamos um exemplo de criação e edição de arquivo de texto em Java, adaptado de Deitel – Java How to Program, 10ª edição:
package criarArquivoTexto;
import java.io.FileNotFoundException;
import java.lang.SecurityException;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class CriarArquivoTexto {
private static Formatter saida; // envia texto para um arquivo
public static void main(String[] args) {
abrirArquivo();
adicionarDados();
fecharArquivo();
}
// Método para abrir (ou criar) o arquivo arquivo.txt
public static void abrirArquivo() {
try {
saida = new Formatter("arquivo.txt"); // Abrir o arquivo
}
catch (SecurityException securityException) {
System.err.println("Não é possível escrever no arquivo. Finalizando.");
System.exit(1); // terminar o programa
}
catch (FileNotFoundException fileNotFoundException) {
System.err.println("Erro ao abrir o arquivo. Finalizando.");
System.exit(1); // Finalizar o programa
}
}
// Método para adicionar registros ao arquivo
public static void adicionarDados() {
Scanner entrada = new Scanner(System.in);
System.out.printf("%s%n","Entre com o código do produto e nome do item para cadastro:");
System.out.printf("%s%n","Para salvar os dados inseridos pressione Ctrl+Z:");
while (entrada.hasNext()) { // iterar até que seja encontrado o marcador de fim-de-arquivo
try {
// Gravar novo registro no arquivo; não verifica se entrada é válida.
saida.format("%d %s %n", entrada.nextInt(),entrada.next());
}
catch (FormatterClosedException formatterClosedException) {
System.err.println("Erro ao escrever no arquivo. Finalizando.");
break;
}
catch (NoSuchElementException elementException) {
System.err.println("Entrada inválida. Tente novamente.");
entrada.nextLine(); // Descartar a entrada para que o usuário possa tentar de novo
}
System.out.print("Entre com o próximo código e item:\n");
} // Fim do laço while
} // Fim do método adicionarDados
// Método para fechar o arquivo
public static void fecharArquivo() {
if (saida != null)
saida.close();
}
} // Fim da classe CriarArquivoTexto
Note que para sinalizar o final de arquivo e sair do programa, usamos a combinação de teclas Ctrl+Z. Esse é o marcador EOF padrão no Windows. Se estiver usando outro sistema operacional, o marcador poderá ser diferente:
| Sistema Operacional | Marcador EOF (Combinação de teclas) |
| Microsoft Windows | Ctrl + Z |
| Unix / Linux / Mac OS X | <Enter> Ctrl + d |
Após a execução do programa, podemos entrar na pasta do projeto e lá encontraremos o arquivo gerado. Se o abrirmos usando o editor de texto padrão do sistema, veremos o conteúdo que foi fornecido à aplicação anteriormente:
Arquivo criado e dados salvos com sucesso! Na próxima lição vamos aprender a ler os dados armazenados em um arquivo de texto sequencial usando Java.
