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.