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.