Diferencia entre getPath() y getCanonicalPath() en Java

El método getPath() es parte de la clase File . Esta función devuelve la ruta del objeto de archivo dado. La función devuelve un objeto de string que contiene la ruta del objeto de archivo dado, mientras que el método getCanonicalPath() es parte de la clase Path . Esta función devuelve la ruta canónica del objeto de archivo dado. Si el nombre de ruta del objeto de archivo es Canonical, simplemente devuelve la ruta del objeto de archivo actual. La ruta canónica siempre es absoluta y única, la función elimina el ‘.’ ‘..’ de la ruta si está presente. Ahora, ambos métodos getPath() y getCanonicalPath()ambos son parte de la clase de archivo y ambos son métodos de archivo para obtener la ruta del sistema de archivos. Primero, entendemos la diferencia entre ambas rutas a partir de la siguiente estructura de archivos.

Ilustración: considerando una ruta aleatoria en el directorio de Windows

|--D:
   \--Article      
   \--Test
   \--Program
       \--Python
       \--JAVA
           \Program1.java

Si se pasa la ruta » Python/../JAVA/Program1.java «, entonces el valor de Ruta y la ruta canónica es como la siguiente.

  • Ruta: Python\..\JAVA\Program1.java
  • Ruta canónica: d:\Program\JAVA\Program1.java

Ahora entendamos la diferencia entre ambos métodos.

(A) Diferencias teóricas

método getPath() método getCanonicalPath()
Esta función devuelve la ruta de acceso abstracta como una string. Esta función devuelve la ruta canónica del objeto de archivo dado.
El nombre de ruta devuelto podría ser una ruta absoluta. El camino canónico es siempre un camino absoluto y único. 
Si se usa String ruta de acceso para crear un objeto de archivo, simplemente devuelve la ruta de acceso. Este método primero convierte este nombre de ruta a forma absoluta si es necesario. Para hacerlo, invocará el método getAbsolutePath() y luego lo asignará a su forma única.
Si se usa una URL en el argumento del objeto de archivo, elimina el protocolo y devuelve el nombre del archivo.  Este método elimina los nombres redundantes como ” . “ y “.. ” del nombre de la ruta. Resolverá los enlaces simbólicos y convertirá las letras de unidad a un caso estándar.
Este método no arrojará ninguna excepción.

Este método arroja las siguientes excepciones. 

Excepción de seguridad: si no se puede acceder al valor de propiedad requerido.

Excepción de E/S: si se produce una excepción de E/S.

Ejemplo:

Archivo f = nuevo archivo («c:\\usuarios\\..\\programa\\.\\archivo1.txt»)

Ruta :- c:\usuarios\..\programa\.\archivo1.txt

Ejemplo:

Archivo f = nuevo archivo («c:\\usuarios\\..\\programa\\.\\archivo1.txt»)

Ruta canónica: – c:\program\file1.txt

Implementación: (B) Diferencias prácticas

Ejemplo

Java

// Java program to demonstrate the difference
// between getPath() and  getCanonicalPath() function
 
// Importing input output classes
import java.io.*;
 
// Class
public class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
        // Try block to check exceptions
        try {
 
            // Creating a file object
            File f = new File(
                "g:\\gfg\\A(7)PATH\\Test\\..\\file1.txt");
 
            // Getting the Path of file object
            String path = f.getPath();
 
            // Getting the Canonical path of the file object
            String canonical = f.getCanonicalPath();
 
            // Display the file path of the file object
            // and also the Canonical path of file
            System.out.println("Path : " + path);
            System.out.println("Canonical path : "
                               + canonical);
        }
 
        // Catch block to handle if exception/s occurs
        catch (Exception e) {
 
            // Exception message is printed where occurred
            System.err.println(e.getMessage());
        }
    }
}

Producción:

Path (getPath()): g:\gfg\A(7)PATH\Test\..\file1.txt
path (getCanonicalPath()) : G:\gfg\A(7)PATH\file1.txt

Publicación traducida automáticamente

Artículo escrito por meetsuvariya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *