Java: Class File ( a classe File ) - Obtendo informações de arquivos e diretórios

Objetos dessa classe irão servir para objetos de outras classes da java.io package.
Usamos ela para obter informações SOBRE o arquivo ou diretório/pasta, e não sobre seu conteúdo.

Ao contrário de outras classe e do que o nome possa sugerir, essa classe não abre, ou permite o processamento de conteúdo de um arquivo. A sua função está relacionada com o caminho / diretório / endereço dos arquivos ou diretório que desejarmos manipular.
Ela provém, diversos métodos para checagem de existência de arquivos ou diretórios, se é um ou outro, o tamanho do arquivo, a última vez que foi alterado, se é possível escrever ou lê-lo, etc. Adiante explicarei mais detalhadamente alguns dos métodos da classe File.

Dentre os argumentos passados para o constructor de um File object, destacamos:
path -> é o caminho do arquivo ou diretório
absolute path -> todos os diretórios, começando pelo do root, até o arquivo ou diretório de interesse
relative path -> começa no diretório onde a aplicação é executada, que é parente do diretório atual
URL -> endereço na web, Uniform Resource Locators
URI -> endereço no computador, Uniform Resource Identifier. Como o '/home/ProgramacaoProgressiva/' ou 'C:/windows/forever alone' caso ainda esteja no caminho das trevas


Alguns métodos da classe File:
  • boolean canRead() -> retorna true se for possível ler o arquivo, falso o contrário
  • boolean canWrite() -> retorna true se for possível escrever no arquivo, falso o contrário
  • boolean exists() -> retorna true se o diretório ou arquivo se o objeto File existe, falso o contrário
  • boolean isFile() -> retorna true se o argumento passado ao construtor da File é um arquivo, falso o contrário
  • boolean isDirectory() -> retorna true se o argumento passado ao construtor da File é um diretório, falso o contrário
  • boolean isAbsolute() -> retorna true para caso o argumento seja de um caminho absoluto, falso o contrário
  • String getAbsolutePath() -> retorna uma String com o caminho absoluto do diretório ou arquivo
  • String getName() -> retorna uma String com o nome do arquivo ou do diretório
  • String getPath() -> retorna uma Sting com o caminho do arquivo ou diretório
  • String getParent() -> retorna uma String com o caminho do diretório pai (acima;anterior) ao do arquivo ou diretório atual
  • long length() -> retorna um tamanho, em bytes, do arquivo ou inexistente, caso seja diretório
  • long lastModified() -> retorna o tempo em que o arquivo ou diretório foi modificado pela última vez; varia de acordo com o sistema
  • String[] list() -> retorna um array de Strings com o conteúdo do diretório, ou null se for arquivo


Para efeito de fixar conhecimento, um código-fonte vale mais que mil tutoriais (inventei agora, ficou legal?):

FileStudy.java
import java.util.Scanner;
import java.io.File;

public class FileStudy
{
 
    public static void main(String[] args)
    {
        Scanner entrada = new Scanner( System.in );
     
        System.out.print("Entre com um endereço válido de um arquivo: ");
        String caminho = entrada.nextLine();
     
        metodos(caminho);
    }
 
    public static void metodos(String caminho)
    {
        File arquivo = new File(caminho);
     
        if( arquivo.exists() )
        {
            System.out.println("O caminho especificado existe !\nVamos aos testes:\n");
         
            if(arquivo.isAbsolute())
                System.out.println("É um caminho absoluto");
            else
                System.out.println("Não é um caminho absoluto");
         
            if(arquivo.isFile())
                System.out.printf("É um arquivo de tamanho %s bytes\n"
                        + "Útima vez modificado %s\n"
                        + "Cujo caminho é %s\n"
                        + "De caminho absoluto %s\n"
                        + "E está no diretório pai %s\n",
                        arquivo.length(), arquivo.lastModified(), arquivo.getPath(), arquivo.getAbsolutePath(), arquivo.getParent() );
         
            else
            {
                 System.out.println("É um diretório cujo conteúdo tem os seguintes arquivos: ");
                 String[] arquivos = arquivo.list();
             
                 for( String file : arquivos)
                   System.out.println( file );
            }
         
        }
        else
                 System.out.println("Endereço errado");
    }
}

Diferente do comum, não irei comentar nada aqui, pois ao rodar o programa verá o que cada método faz.
Enfim, rode e estude. Está tudo prontinho e mastigado em suas mãos.

4 comentários:

Emerson Dias disse...

Um dos melhores post sobre a Class File muito bom obrigado.

Danilo Pereira disse...

Muito Obrigado cara você me salvou.

Cleofas Batista Da Silva disse...

Valeu Java Progressivo!

Milton Chemane disse...

Posetivo pude tirar minha duvida.

Obrigado!