Java um pouco sobre a classe File
Ao contrario do que podemos pensar a classe File
em Java não representa um arquivo/diretório mas sim um caminho para um arquivo/diretório que pode ou não existir, então criar um objeto do tipo File
não necessariamente significa criar um arquivo, para isso pode-se utilizar um método especifico da classe, como também utilizamos outro método para saber se o arquivo já existe no sistema de arquivo . Veremos estes métodos a seguir.
Vamos então instanciar um objeto File
e verificar se ele existe:
import java.io.File;
...
File arquivo = new File("texto.txt");
if( ! arquivo.exists() ){
System.out.println("até aqui não foi criado um arquivo");
}
Na linha 7 você foi chamando o método exists()
quer retorna true se o arquivo representado pelo objeto existe no sistema de arquivos.
Vejamos agora como criar um arquivo vazio(para colocar conteúdo dentro necessitamos de outras classes):
try{
if( arquivo.createNewFile() ){
System.out.println("O arquivo foi criado");
}else{
System.out.println("O arquivo não foi criado, talvez ele já exista");
}
}catch(IOException ex){
ex.printStackTrace();
}
Criamos o arquivo na linha 2 através do método createNewFile()
que retorna true se o arquivo for criado sem problemas ou false se ele já existir. Lembrando que o método createNewFile()
pode lançar uma exceção (IOException
) então ele deve estar em um bloco try...catch
.
Como podemos criar um arquivo também podemos criar um diretório.
File diretorio = new File("pasta");
if( diretorio.mkdir() ){
System.out.println("diretório criado com sucesso");
}else{
System.out.println("não foi possível criar o diretorio");
}
File sub = new File("pasta2"+File.separator+"subpasta");
sub.mkdirs();
Para criar um diretório criamos o objeto File
com o nome que desejamos para ele e depois chamamos o método mkdir()
que retornará true se o diretório for criado e false se não.
Se quisermos criar um diretório dentro de outro diretório que também não existe utilizamos o método mkdirs()
que ele irá criar toda a arvore de de diretórios. Lembrando que quando formos informar o caminho do diretório devemos utilizar o separador de diretórios utilizado pelo sistema operacional, e para evitar incompatibilidades podemos utilizar a constante File.separator
.
Após criar um diretório podemos criar um arquivo dentro dele passando o objeto File representando o diretório como parâmetro para criar no novo arquivo:
File dir = new File( "dir");
if( dir.mkdir() ){
System.out.println("Diretório criado");
}else{
System.out.println("Diretório não criado");
}
try{
File file = new File(dir, "file.txt");
if( file.createNewFile() ){
System.out.println("Arquivo criado");
}else{
System.out.println("Arquivo não criado");
}
}catch(IOException ex){
ex.printStackTrace();
}
Já que estamos falando em diretórios podemos listar os arquivos de um.
File dir = new File("pasta");
if( dir.isDirectory() ){
String[] arqs = dir.list();
for(String nome : arqs){
System.out.println(nome);
}
}
Antes de tentar listar os arquivos de um diretório é uma boa ideia saber se ele é realmente um diretório, o que podemos ver utilizando o método isDirectory()
, com um método parecido podemos também descobrir se ele é um arquivo normal: isFile()
.
Na linha 3 utilizamos o método list()
que retorna um array de Strings contendo os nomes dos arquivos presentes no diretório, outro método que podemos utilizar é o listFiles
que ao invés de retornar um array de String retorna um array de File.
Vamos agora deletar nosso arquivo.
if( arquivo.delete() ){
System.out.println("O arquivo foi deletado");
}else{
System.out.println("O arquivo não foi deletado");
}
O método delete()
retorna true se o arquivo for deletado, caso contrario retorna false.
Vamos mudar o nome do arquivo agora.
File novoNome = new File("pasta_renomeada");
diretorio.renameTo( novoNome );
Para renomear primeiro precisamos criar um novo caminho ou seja um objeto File
, chamamos o método renameTo()
e passamos o novo caminha como parâmetro.
Nos exemplos acima estamos utilizando caminhos relativos(em relação ao diretório que estamos executando a aplicação) que acredito serem melhores em java pois deixa o código mais compatível entre S.O. mas em algumas situações precisamos obter o caminho absoluto(caminho que vem desde o a raiz do sistemas de arquivo) e podemos fazer isso através do método getAbsoluteFile()
.
File arquivo new File("texto.txt");
System.out.println( arquivo.getAbsoluteFile() );
A classe File possui vários outro métodos que também podem ser uteis, como para saber as permissões de arquivos (canExecute()
, canRead()
, canWrite()
) entre outras que podem ser vista na documentação.
Já nos estendemos demais, veremos como escrever em um arquivo em um próximo post.