getCanonicalPath()和getAbsolutePath()方法属于Java中的java.io.File类。这些方法本质上用于获取系统目录结构中文件对象的路径。
AbsoluteFilePath是文件对象的路径名
- 如果我们使用抽象路径创建文件对象,则绝对文件路径与抽象文件路径相同。
- 如果我们使用相对路径创建文件对象,则绝对文件路径是针对当前目录解析相对路径后获得的路径。
CanonicalFilePath是文件对象的路径名
- 如果我们使用抽象路径创建文件对象,则规范文件路径与抽象文件路径相同
- 如果我们使用相对路径创建文件对象,则规范文件路径即是最短的绝对路径又是唯一路径的路径
让我们举个例子。说,我们使用路径“ C:/folder1/folder2/folder3/file.txt”创建一个文件对象。显然,上述路径是抽象路径,因此绝对文件路径以及规范文件路径都将与上述相同。
但是,如果在文件对象创建过程中提到的文件路径类似于“ C:/folder1 /folder2 /folder3 /folder4 /../../folder3 /file.txt”,则绝对文件路径将与上述路径相同,但规范文件路径将是最短的绝对路径,即“ C:/folder1/folder2/folder3/file.txt”。
方法1:getAbsolutePath()
public String getAbsolutePath()
方法2:getCanonicalPath()
public String getCanonicalPath() throws IOException
例:
方法1:getAbsolutePath()
file.getAbsolutePath() // It returns absolute path of file object in system's directory structure
方法2:getCanonicalPath()
file.getCanonicalPath() // It returns canonical path of file object in system's directory structure
范例1:
Java
// Java Program to illustrate Difference Between
// getCanonicalPath() and getAbsolutePath()
// Importing input output classes
import java.io.*;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
throws IOException
{
// Path of Test.txt is E:\workspace\gfg\Test.txt
// Test.txt is created inside project directory,
// Here project name is gfg
File file1 = new File("Test.txt");
// Getting th absolute path of the file
// using getAbsolutePath() method
System.out.println("Absolute Path:"
+ file1.getAbsolutePath());
// Getting the canonical path of the file
// using getCanonicalPath() method
System.out.println("Canonical Path:"
+ file1.getCanonicalPath());
}
}
输出:
Absolute Path: E:\workspace\gfg\Test.txt Canonical Path:E:\workspace\gfg\Test.txt
输出说明:在这里,由于已经使用抽象的完整文件路径创建了文件对象,因此这两种方法都提供了与我们在文件对象创建期间使用的相同输出。
范例2:
Java
// Java Program to illustrate Difference Between
// getCanonicalPath() and getAbsolutePath()
// Importing input output classes
import java.io.*;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
throws IOException
{
// Creating an object of File class where
// Path of Test.txt is E:/workspace/gfg/Test.txt
File file2 = new File(
"e:\\workspace\\gfg\\..\\gfg\\Test.txt");
// Getting the absolute path of file
// using getAbsolutePath() method
System.out.println("Absolute Path:"
+ file2.getAbsolutePath());
// Getting the canonical path of file
// using getCanonicalPath() method
System.out.println("Canonical Path:"
+ file2.getCanonicalPath());
}
}
输出:
Absolute Path: e:\workspace_2021-Apr\gfg\..\gfg\Test.txt Canonical Path:E:\workspace_2021-Apr\gfg\Test.txt
输出说明:
这里使用相对文件路径创建了文件对象,该文件路径本质上指向E:/workspace/gfg/Test.txt。因此,在调用getAbsolutePath()时,它提供了在创建文件对象时提到的相对路径。但是在调用getCanonicalPath()时,它提供了抽象路径或直接路径,并将驱动器号转换为标准大小写。
范例3:
Java
// Java Program to illustrate Difference Between
// getCanonicalPath() and getAbsolutePath()
// Importing input output classes
import java.io.*;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
throws IOException
{
// Now creating File class object where
// Path of Test.txt is E:/Test.txt
// Current Directory:E:/workspace/gfg/src
File file3 = new File("../../Test.txt");
// Getting the absolute path of file
// using getAbsolutePath()
System.out.println("Absolute Path:"
+ file3.getAbsolutePath());
// Getting the canonical path of file
// using getCanonicalPath()
System.out.println("Canonical Path:"
+ file3.getCanonicalPath());
}
}
输出:
Absolute Path:E:\workspace\gfg\..\..\Test.txt Canonical Path:E:\Test.txt
输出说明:
此处已创建具有完整相对路径的文件对象。在调用getAbsolutePath()时,我们可以看到如何获得路径,而不是完全相对的路径,而是部分相对的路径。但是在调用getCanonicalPath()时,我们可以看到文件系统中的直接抽象路径。
相关用法
- Java getPath()和getCanonicalPath()的区别用法及代码示例
- Java getPath()和getAbsolutePath()的区别用法及代码示例
- Java File getCanonicalPath()用法及代码示例
- Java File getAbsolutePath()用法及代码示例
- Java super()和this()的区别用法及代码示例
- Java notify()和notifyAll()的区别用法及代码示例
- Java Stream.of()和Arrays.stream()的区别用法及代码示例
注:本文由纯净天空筛选整理自samandal2021大神的英文原创作品 Difference Between getCanonicalPath() and getAbsolutePath() in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。