Classes de Arquivo
Classes de arquivo
Para trabalhar com arquivos em uma linguagem baseada na orientação a objetos necessariamente precisaremos compreender que deveremos tratá-los como objetos mas tendo em mente que a estrutura de diretórios em seu sistema operacional é o ponto central em nosso desenvolvimento.
Classes de Arquivo
java.io.File
A classe File representa na linguagem Java tanto um arquivo quanto um diretório, a sua ligação com um arquivo\diretório físico em seu sistema operacional é definido no que chamamos de construtor de objetos conforme exemplo abaixo:
Vamos imaginar que em seu disco rígido HD exista o diretório\arquivo conforme o sistema operacional:
S.O | Diretório | Arquivo |
---|---|---|
Windows | C:\arquivos | aula1.txt |
Linux | /home/arquivos | aula1.txt |
Como poderemos referenciar este arquivo dentro do nosso programa?
public class FileApp {
public static void main(String[] args) {
//O java necessita de uma barra dupla
File fileWindows = new File("C:\\arquivos\\aula1.txt");
//ou
//File fileWindows = new File("C:/arquivos/aula1.txt");
File fileLinux = new File("/home/arquivos/aula1.txt");
}
}
Ao executarmos o nosso programa nenhum erro aconteceu, mas sabemos que: Se estivermos executando uma tentativa de ler ou escrever neste arquivo dependendo do sistema operacional, um erro poderá ser exibido algo do tipo: Arquivo não localizado.
Por ser um objeto originada do classe File, este objeto terá métodos úteis conforme ilustração a seguir:
public class FileApp {
public static void main(String[] args) {
File fileWindows = new File("C:/arquivos/aula1.txt");
File fileLinux = new File("/home/arquivos/aula1.txt");
//O método exists() retorna true ou false em caso da existência do arquivo
System.out.println(fileWindows.exists());
System.out.println(fileLinux.exists());
//O método isFile() retorna true ou false caso estejamos nos referindo a um arquivo ou diretório
System.out.println(fileWindows.isFile());
//O método isDirectory() é o oposto de isFile()
System.out.println(fileWindows.isDirectory());
}
}
Métodos avançados
Vamos imaginar que o nosso diretório /arquivos
quanto o arquivo aula1.txt
ainda não existe em nosso sistema operacional, a classe File contém métodos capazes de realizar a criação de ambos correspondentemente.
public class FileApp {
public static void main(String[] args) {
File diretorio = new File("C:/arquivos");
//criando o diretório no sistema operacional correspondente
diretorio.mkdir();
//teste o mkdirs()
//diretorio.mkdirs();
try {
File aula1 = new File(diretorio, "aula1.txt");
/*
Criando o arquivo aula.txt no diretório mencionado no primeiro parâmetro
com a necessidade de tratar uma exceção em caso de não existir o(s) diretório(s) mencionado(s)
*/
aula1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
java.io.FileWriter
A classe Java FileWriter é usada para gravar dados orientados a caracteres
em um arquivo.
- Esta classe herda da classe
OutputStreamWriter
que, por sua vez, herda da classe Writer. - Os construtores dessa classe assumem que a codificação de caracteres padrão e o tamanho do buffer de bytes padrão são aceitáveis. Para especificar você mesmo esses valores, construa um OutputStreamWriter em um FileOutputStream.
- FileWriter destina-se a escrever fluxos de caracteres. Para gravar fluxos de bytes brutos, considere usar um FileOutputStream.
- FileWriter cria o arquivo de saída se ainda não estiver presente.
Vamos abordar alguns cenários:
- FileWriter(File file): Constrói um objeto FileWriter dado um objeto File, ele cria o arquivo com conteúdo inserido.
public class FileApp {
public static void main(String[] args) {
try {
File aula1 = new File("C:/arquivo/aula1.txt");
FileWriter writer = new FileWriter(aula1);
String conteudo = "gleyson";
// cada caractere será escrito no arquivo
for (int i = 0; i < conteudo.length(); i++)
writer.write(conteudo.charAt(i));
System.out.println("Escrita no arquivo realizada com sucesso!! ");
// fechando o arquivo
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- FileWriter(File file, boolean append): Constrói um objeto FileWriter permitindo acrescentar novos conteúdos.
public class FileApp {
public static void main(String[] args) {
try {
File aula1 = new File("C:/arquivos/aula1.txt");
FileWriter writer = new FileWriter(aula1,true);
String conteudo = "sampaio";
// cada caractere será escrito no arquivo
for (int i = 0; i < conteudo.length(); i++)
writer.write(conteudo.charAt(i));
System.out.println("Escrita no arquivo realizada com sucesso!! ");
// fechando o arquivo
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
java.io.FileReader
A classe FileReader do pacote java.io pode ser usada para ler dados (em caracteres) de arquivos, ela estende a classe InputSreamReader
.
Vamos abordar alguns cenários:
- FileReader(File file): Constrói um objeto FileReader pronto para compartilhar os
caracteres
existentes em um arquivo.
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileApp {
public static void main(String[] args) {
try {
File aula1 = new File("C:/arquivos/aula1.txt");
FileReader reader = new FileReader(aula1);
//Aprendemos que mutação de texto é melhor usar StringBuilder
StringBuilder conteudo = new StringBuilder();
// considerando que arquivo contenha conteúdos
// e enquanto houver caracteres para ser lido
while (reader.ready()){
// o método read retorna o caractere em forma de inteiro
//necessitando uma conversão explícita para char
conteudo.append( (char) reader.read());
}
System.out.println("Leitura do arquivo realizada com sucesso !! ");
System.out.println(conteudo.toString());
// fechando o arquivo
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}