Utilizando Arquivos e Diretórios: Desmistificando a Certificação SCJP6 Parte X - Parte 4

Na sequência veremos um pouco mais sobre arquivos e diretórios.

Utilizando Arquivos e Diretórios

Uma tema que normalmente gera dúvida é o fato de que um objeto do tipo File é usado para representar ou um diretório ou um arquivo.

File file = new File(“caminhoDoFile”);

Existem dois modos de criar um arquivo:

  1. Criar uma Stream ou um Writer. Mais especificamente, criar um PrintWriter, um FileWriter, ou um FileOutputStream.
  2. Chamar o método createNewFile() a partir de um objeto File.
file.createNewFile();

Veja um exemplo completo a seguir:

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Principal { /** * @param args */ public static void main(String[] args) { try{ PrintWriter pw = new PrintWriter("uuuu"); FileWriter fw = new FileWriter("vvvv"); FileReader fr = new FileReader("xxxx"); FileInputStream fi = new FileInputStream("yyyy"); FileOutputStream fo = new FileOutputStream("zzzz"); }catch (IOException e) { } } }

Do mesmo modo como na criação de um arquivo, criar um diretório é um procedimento de 2 etapas; primeiro, criamos um objeto Directory (File) e logo após criamos o diretório real através do método mkdir().

File dir = new File(“caminhoDiretorio”); dir.mkdir();

No momento que tivermos um diretório, podemos colocar arquivos.

File arquivo = new File(dir, “arquivo.txt”); arquivo.createNewFile();

Precisamos ter atenção ao criar novos diretórios. Segundo vimos, criar um Writer ou um Reader criará automaticamente um arquivo; porém, o mesmo não ocorre com os diretórios.

File dir = new File("diretorio"); //dir.mkdir(); File arquivo = new File(dir, "arquivo1.txt"); arquivo.createNewFile();//Exceção se não houver dir.mkdir()

Observe o exemplo:

package devmedia1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; public class TesteFile { /** * @param args */ public static void main(String[] args) { try{ File d1 = new File("diretorio"); d1.mkdir(); File fl = new File(d1,"arq1"); PrintWriter pw = new PrintWriter(fl); System.out.println(d1.exists()); System.out.println(fl.exists()); System.out.println(d1.isDirectory()); System.out.println(fl.isFile()); FileReader fr = new FileReader(fl); BufferedReader buffer = new BufferedReader(fr); String st; while((st=buffer.readLine())!=null){ System.out.println(st); } buffer.close(); }catch (IOException e) { } } }

Muito cuidado ao que método readLine() retorna. Quando não existir mais dados para serem lidos, readLine() retorna o valor null. Esse é o aviso para parar a leitura do arquivo.

Note também que não invocamos um método flush(). Na leitura de um arquivo não é necessário fazer flushing, e você não encontrará um método flush() em uma classe Reader.

O código a seguir evidencia alguns dos recursos mais comuns relativos a apagar arquivos e diretórios através do método delete() e renomear arquivos e diretórios por meio do método renameTo().

import java.io.File; import java.io.IOException; public class MetodosFile { /** * @param args */ public static void main(String[] args) { try{ File dir = new File("c:\\d1"); dir.mkdir();//cria diretório dir File arq1 = new File(dir, "arquivo1.txt"); arq1.createNewFile();//cria arquivo1.txt dentro de d1 File arq2 = new File(dir, "arquivo2.txt"); arq2.createNewFile();//cria arquivo2.txt dentro de d1 d1.delete();//tenta remover d1, mas não consegue, pois dir não está vazio! arq1.delete();//apaga arq1 File d2 = new File("c:\\newdir"); dir.renameTo(d2);//d1 é renomeado para newdir File novo = new File(dir, "newarquivo.txt"); arq2.renameTo(novo);//arquivo2.txt é renomeado para newarquivo.txt }catch (IOException e) { } } }

Partindo do pressuposto de que temos um diretório chamado d1, no qual almejamos fazer uma busca, o próximo código utiliza o método File.list() para criar um array String de arquivos e diretórios, nos quais usamos o loop for aprimorado para iterar e exibir.

import java.io.File; public class MetodosDeFile { /** * @param args */ public static void main(String[] args) { String []arquivos = new String[50]; File dir = new File("c:\\"); arquivos = dir.list(); for(String s: arquivos) System.out.println(s); } }

Na próxima parte do artigo falaremos da classe Console e Serialização.


Leia todos artigos da série

Artigos relacionados