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:
- Criar uma Stream ou um Writer. Mais especificamente, criar um PrintWriter, um FileWriter, ou um FileOutputStream.
- 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
- Desmistificando a Certificação SCJP6 - Parte I
- Desmistificando a Certificação SCJP6 - Parte II
- Desmistificando a Certificação SCJP6 - Parte III
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 1
- Desmistificando a Certificação SCJP6 - Parte IV - Parte 2
- Desmistificando a Certificação SCJP6 - Parte V - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte V - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VI - Parte 3/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 1/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 2/3
- Desmistificando a Certificação SCJP6 - Parte VII - Parte 3/3
- Operadores apropriados - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 1
- Instruções if e switch - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 2
- Iteradores e loops - Desmistificando a Certificação SCJP6 - Parte VIII - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - A
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte VIII - Parte 4 - B
- Tratamento de Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 1
- Definindo Exceções em Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 2
- Assertivas Java: Desmistificando a Certificação SCJP6 - Parte IX - Parte 3
- Mini-Teste: Desmistificando a Certificação SCJP6 - Parte IX - Parte 4
- String: Desmistificando a Certificação SCJP6 - Parte X - Parte 1
- StringBuilder/StringBuffer e File: Desmistificando a Certificação SCJP6 - Parte X - Parte 2
- Combinação de Classes E/S: Desmistificando a Certificação SCJP6 - Parte X - Parte 3
- Console e Serialização: Desmistificando a Certificação SCJP6 - Parte X - Parte 5
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 A
- Mini-teste: Desmistificando a Certificação SCJP6 - Parte X - Parte 6 B
- Expressões Regulares: Desmistificando a Certificação SCJP6 Parte XI - Parte 1
- Lista Negada e Metacaracteres: Desmistificando a Certificação SCJP6 Parte XI - Parte 2
- Metacaracteres Âncora e Busca: Desmistificando a Certificação SCJP6 Parte XI - Parte 3