A classe File
do Java encapsula de forma simplificada um arquivo ou diretório do sistema de arquivos local. O seu construtor pode receber caminhos absolutos ou relativos ao diretório atual do programa, por exemplo:
new File(".") //--> diretório atual do programa
O problema de usar caminhos relativos é que pode haver confusão em algumas situações, já que o diretório atual do programa pode ser modificado. Além disso, se o usuário pode digitar o caminho ou parte dele em algum campo, em geral deve-se evitar que ele use caminhos relativos, com exceção no caso de ser uma configuração do próprio programa.
Verificando se um caminho é relativo
O método File.isAbsolute()
nos ajuda nessas tarefas e diz se o caminho é absoluto.
Veja um exemplo:
File f1 = new File("..");
System.out.println(f1.isAbsolute()); //imprime false
File f2 = new File("c:\\temp");
System.out.println(f2.isAbsolute()); //imprime true
Recuperando o caminho absoluto
Outro método útil é getAbsolutePath()
. Ele retorna o caminho completo de uma instância da classe File
.
Veja mais um exemplo:
File arquivo1 = new File("\\pasta\\arquivo.xml");
System.out.println(arquivo1.getAbsolutePath()); //imprime C:\pasta\arquivo.xml
File arquivo2 = new File("c:\\pasta\\arquivo.xml");
System.out.println(arquivo2.getAbsolutePath()); //imprime c:\pasta\arquivo.xml
Outras funcionalidades interessantes de File
A classe File
possui vários métodos interessantes para situações específicas, por exemplo
getParentFile
: retorna umFile
apontando para o diretório que contém o arquivo ou diretório atual.getAbsoluteFile
: retorna outra instância de File com o caminho absoluto.toURI
: retorna uma URI (Universal Resource Identifier) que começa comfile:
. É interessante para uso na rede.isFile
eidDirectory
: informa seFile
aponta para um arquivo ou diretório, respectivamente.exists
: informa se o arquivo existe.canRead
ecanWrite
: informa se o arquivo pode ser lido ou gravado, respectivamente.createNewFile
: cria um novo arquivo em branco.delete
: apaga o arquivo ou diretório (se estiver vazio).length
: retorna o tamanho do arquivo em bytes.list
elistFiles
: lista arquivos e diretórios, casoFile
seja um diretório.mkdir
emkdirs
: cria um diretório, casoFile
seja um diretório. O último também cria os diretórios “pais”, caso não existam.getFreeSpace
: retorna o espaço disponível na unidade para ondeFile
está apontando.createTempFile
: método estático que retorna um arquivo temporário único para ser usado pelo programa. O métododeleteOnExit
faz com que esse arquivo seja apagado quando o programa Java terminar de executar.
Além dos métodos, a classe File
possui algumas constantes (atributos estáticos) importantes para leitura e gravação de arquivos em diferentes plataformas:
File.separator
: separador de nomes de diretórios. No Unix e Linux é/
, enquanto no Windows é\
.File.pathSeparator
: separador de vários caminhos de diretórios, para permitir criar uma lista de vários diretórios, como a variável PATH do sistema. No Unix e Linux é:
, enquanto no Windows é;
.
Este artigo foi baseado na minha resposta no StackOverflow em Português!