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 necessáriamente 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 conteudo 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âmentro 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 idéia 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 deretório que estamos executando a aplicação) que acredito serem melhores em java pois deixa o código mais compativel 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.
0sem comentários ainda