Java NIO - Caminho

Como o nome sugere, Path é o local específico de uma entidade, como um arquivo ou diretório em um sistema de arquivos, para que se possa pesquisar e acessá-lo naquele local específico.

Tecnicamente em termos de Java, Path é uma interface que é introduzida no pacote de arquivos Java NIO durante a versão 7 do Java e é a representação da localização em um sistema de arquivos específico. Como a interface de caminho está no pacote Java NIO, obtém seu nome qualificado como java .nio.file.Path.

Em geral, o caminho de uma entidade pode ser de dois tipos, um é o caminho absoluto e o outro é o caminho relativo. Como o nome de ambos os caminhos sugere que o caminho absoluto é o endereço de localização da raiz para a entidade onde está localizada, enquanto o caminho relativo é o endereço de localização que é relativo a algum outro caminho. O caminho usa delimitadores em sua definição como "\" para Windows e "/" para sistemas operacionais unix.

Para obter a instância de Path, podemos usar o método estático da classe java.nio.file.Paths get().Este método converte uma string de caminho, ou uma sequência de strings que quando unidas formam uma string de caminho, em uma instância de Path. Este método também lança InvalidPathException se os argumentos passados ​​contiverem caracteres ilegais.

Conforme mencionado acima, o caminho absoluto é recuperado passando o elemento raiz e a lista de diretórios completa necessária para localizar o arquivo. Enquanto o caminho relativo pode ser recuperado combinando o caminho base com o caminho relativo. A recuperação de ambos os caminhos seria ilustrada no exemplo a seguir

Exemplo

package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
   public static void main(String[] args) throws IOException {
      Path relative = Paths.get("file2.txt");
      System.out.println("Relative path: " + relative);
      Path absolute = relative.toAbsolutePath();
      System.out.println("Absolute path: " + absolute);
   }
}

Até agora sabemos o que é interface de caminho, por que precisamos disso e como poderíamos acessá-la. Agora saberíamos quais são os métodos importantes que a interface de caminho nos fornece.

Métodos importantes de Path Interface

  • getFileName() - Retorna o sistema de arquivos que criou este objeto.

  • getName() - Retorna um elemento de nome deste caminho como um objeto Path.

  • getNameCount() - Retorna o número de elementos de nome no caminho.

  • subpath() - Retorna um Path relativo que é uma subsequência dos elementos de nome deste caminho.

  • getParent() - Retorna o caminho pai ou nulo se este caminho não tiver um pai.

  • getRoot() - Retorna o componente raiz deste caminho como um objeto Path ou null se este caminho não tiver um componente raiz.

  • toAbsolutePath() - Retorna um objeto Path que representa o caminho absoluto desse caminho.

  • toRealPath() - Retorna o caminho real de um arquivo existente.

  • toFile() - Retorna um objeto File que representa este caminho.

  • normalize() - Retorna um caminho que é este caminho com elementos de nome redundantes eliminados.

  • compareTo(Path other) - Compara dois caminhos abstratos lexicograficamente. Este método retorna zero se o argumento for igual a este caminho, um valor menor que zero se este caminho for lexicograficamente menor que o argumento ou um valor maior que zero se este caminho for lexicograficamente maior que o argumento .

  • endsWith(Path other) - Testa se este caminho termina com o caminho fornecido. Se o caminho fornecido tiver N elementos, e nenhum componente raiz, e este caminho tiver N ou mais elementos, então este caminho termina com o caminho fornecido se os últimos N elementos de cada caminho, começando no elemento mais distante da raiz, são iguais.

  • endsWith(String other) - Testa se este caminho termina com um Path, construído pela conversão da string de caminho fornecida, exatamente da maneira especificada pelo método endsWith (Path).

Exemplo

O exemplo a seguir ilustra os diferentes métodos de interface de caminho mencionados acima -

package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
   public static void main(String[] args) throws IOException {
      Path path = Paths.get("D:/workspace/ContentW/Saurav_CV.docx");
      FileSystem fs =  path.getFileSystem();
      System.out.println(fs.toString());
      System.out.println(path.isAbsolute());
      System.out.println(path.getFileName());
      System.out.println(path.toAbsolutePath().toString());
      System.out.println(path.getRoot());
      System.out.println(path.getParent());
      System.out.println(path.getNameCount());
      System.out.println(path.getName(0));
      System.out.println(path.subpath(0, 2));
      System.out.println(path.toString());
      System.out.println(path.getNameCount());
      Path realPath = path.toRealPath(LinkOption.NOFOLLOW_LINKS);
      System.out.println(realPath.toString());
      String originalPath = "d:\\data\\projects\\a-project\\..\\another-project";
      Path path1 = Paths.get(originalPath);
      Path path2 = path1.normalize();
      System.out.println("path2 = " + path2);
   }
}