1. Path
aula
Se você quiser escrever um programa que faça algo com arquivos em disco, isso é muito fácil. Java tem muitas classes que ajudam você a trabalhar com os próprios arquivos e seus conteúdos.
As primeiras versões do Java usavam classes como File
e FileInputStream
para trabalhar com arquivos. No entanto, a File
classe agora está obsoleta e não é recomendada para uso. Claro, você ainda pode encontrá-lo no código, parâmetros de método ou construtores de classe.
Desde o início, começaremos a aprender como trabalhar com arquivos usando a Path
classe. Path
é a classe que substituiu File
. É mais seguro e eficiente.
Path
aula
Tecnicamente, Path
não é uma classe — é uma interface. Isso é feito para permitir a escrita de um descendente da Path
classe para cada sistema operacional (e sistema de arquivos).
O Windows tem um padrão para escrever caminhos de arquivo e o Linux tem outro. Claro, existem muitos outros sistemas operacionais no mundo e cada um tem seu próprio padrão.
É por isso que a Path
interface é usada em todos os métodos que trabalham com arquivos, embora na realidade o trabalho seja feito por meio de suas classes descendentes: WindowsPath
, UnixPath
, ...
Criando um Path
objeto
Para criar um Path
objeto (que na verdade será um objeto da WindowsPath
classe descendente), você precisa usar uma declaração como esta:
Path name = Path.of(path);
Onde name
é o nome de uma Path
variável e path
é o caminho para o arquivo (ou diretório), incluindo o nome do arquivo (ou diretório). E of
é um método estático da Path
classe.
O of()
método é usado para criar WindowsPath
objetos se o programa estiver sendo executado no Windows. Se o programa for executado no Linux, os UnixPath
objetos serão criados. Você não pode criar um Path
objeto usando código como .new Path()
Exemplos:
Código | Observação |
---|---|
|
Caminho para o arquivo |
|
Caminho para o diretório |
O arquivo (ou diretório) não precisa existir para que um Path
objeto válido exista. Talvez você queira apenas criar um arquivo... Um Path
objeto é como uma sopa String
: ele não está vinculado a um arquivo específico no disco — apenas armazena um determinado caminho no disco. É isso.
2. Métodos do Path
tipo
A Path
interface tem alguns métodos interessantes. Os mais interessantes são apresentados na tabela abaixo.
Método | Descrição |
---|---|
|
Retorna o diretório pai |
|
Retorna o nome do arquivo sem o diretório |
|
Retorna o diretório raiz de um caminho |
|
Verifica se o caminho atual é absoluto |
|
Converte o caminho para absoluto |
|
Remove curingas em um nome de diretório. |
|
Constrói um novo caminho absoluto a partir de caminhos absolutos e relativos. |
|
Obtém um caminho relativo de dois caminhos absolutos. |
|
Verifica se o caminho atual começa com um determinado caminho |
|
Verifica se o caminho atual termina com um determinado caminho |
|
Divide o caminho em partes usando / como delimitador. Retorna o número de peças. |
|
Divide o caminho em partes usando / como delimitador. Retorna uma parte por seu índice. |
|
Divide o caminho em partes usando / como delimitador. Retorna o subcaminho que corresponde ao intervalo fornecido. |
|
Converte um Path objeto em um File objeto obsoleto |
|
Converte um Path objeto em um URI objeto |
Abaixo está uma breve descrição dos métodos existentes.
3. Dividindo um caminho em partes
O getParent()
método retorna o caminho que aponta para o diretório pai do caminho atual. Independentemente de este caminho ser um diretório ou um arquivo:
Código | Valor |
---|---|
|
|
|
|
|
|
O getFileName()
método retorna um único nome de arquivo (ou diretório) — o que vier depois do último delimitador:
Código | Valor |
---|---|
|
|
|
|
|
|
O getRoot()
método retorna o caminho para o diretório raiz:
Código | Valor |
---|---|
|
|
4. Caminhos absolutos e relativos
Existem dois tipos de caminhos: absolutos e relativos. Um caminho absoluto começa no diretório raiz. Para Windows, pode ser a c:\
pasta; para Linux — o /
diretório
Um caminho relativo é significativo em relação a algum diretório. Ou seja, é como o fim da estrada, mas sem o começo. Você pode transformar um caminho relativo em um caminho absoluto e vice-versa
boolean isAbsolute()
método
O método verifica se o caminho atual é absoluto
Código | Valor |
---|---|
|
|
|
|
Path toAbsolutePath()
método
Converte o caminho em absoluto. Se necessário, adicione o diretório de trabalho atual a ele:
Código | Valor |
---|---|
|
|
|
|
Path normalize()
método
No caminho, em vez de um nome de diretório, você pode escrever "..", o que significa voltar um diretório . A normalização elimina essas coisas. Exemplos:
Código | Valor |
---|---|
|
|
|
|
Path relativize(Path other)
método
O relativize()
método permite construir as "diferenças entre caminhos": um caminho relativo a outro
Código | Valor |
---|---|
|
|
|
|
|
Exceção de argumento ilegal: os dois caminhos têm uma "raiz" diferente (discos diferentes) |
Path resolve(Path other)
método
O resolve()
método faz o contrário de relativize()
: ele constrói um novo caminho absoluto a partir de um caminho absoluto e um relativo.
Código | Valor |
---|---|
|
|
|
|
toFile()
método
O método retorna um objeto obsoleto File
que armazena o mesmo caminho de arquivo que o Path
objeto.
toURI()
método
O método converte o caminho em um URI padrão e retorna um objeto que contém o caminho para o arquivo:
Caminho para o arquivo | URI para o arquivo |
---|---|
|
|
GO TO FULL VERSION