`

【转】Java中file类getPath(),getAbsolutePath(),getCanonicalPath()方法区别

 
阅读更多

file的这几个取得path的方法各有不同,下边说说详细的区别

概念上的区别:(内容来自jdk,个人感觉这个描述信息,只能让明白的人明白,不明白的人看起来还是有点难度(特别试中文版,英文版稍好些)所以在概念之后我会举例说明。如果感觉看概念很累就跳过直接看例子吧。看完例子回来看概念会好些。

getPath
public String getPath()将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。 

返回:
此抽象路径名的字符串形式

 

getAbsolutePath
public String getAbsolutePath()返回抽象路径名的绝对路径名字符串。 
如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式分析此路径名。在 UNIX 系统上,通过根据当前用户目录分析某一相对路径名,可使该路径名成为绝对路径名。在 Microsoft Windows 系统上,通过由路径名指定的当前驱动器目录(如果有)来分析某一相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录来分析它。 


返回:
绝对路径名字符串,它与此抽象路径名表示相同的文件或目录的 
抛出: 
SecurityException 
- 如果无法访问所需的系统属性值。
另请参见:
isAbsolute()

 

getCanonicalPath
public String getCanonicalPath()
                        
throws IOException返回抽象路径名的规范路径名字符串。 
规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换成绝对路径名,这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称(比如 
"." 和 "..")、分析符号连接(对于 UNIX 平台),以及将驱动器名转换成标准大小写形式(对于 Microsoft Windows 平台)。 

表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。 


返回:
表示与此抽象路径名相同的文件或目录的规范路径名字符串 
抛出: 
IOException 
- 如果发生 I/O 错误(可能是因为构造规范路径名需要进行文件系统查询) 
SecurityException 
- 如果无法访问所需的系统属性值,或者存在安全管理器,且其 SecurityManager.checkRead(java.io.FileDescriptor) 方法拒绝对该文件进行读取访问
从以下版本开始: 
JDK1.
1 


二、例子:
1,getPath()与getAbsolutePath()的区别

public static void test1(){
        File file1 
= new File(".\\test1.txt");
        File file2 
= new File("D:\\workspace\\test\\test1.txt");
        System.out.println(
"-----默认相对路径:取得路径不同------");
        System.out.println(file1.getPath());
        System.out.println(file1.getAbsolutePath());
        System.out.println(
"-----默认绝对路径:取得路径相同------");
        System.out.println(file2.getPath());
        System.out.println(file2.getAbsolutePath());
        
    }


得到的结果:

-----默认相对路径:取得路径不同------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默认绝对路径:取得路径相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt

因为getPath()得到的是构造file的时候的路径。
getAbsolutePath()得到的是全路径
如果构造的时候就是全路径那直接返回全路径
如果构造的时候试相对路径,返回当前目录的路径+构造file时候的路径

2,getAbsolutePath()和getCanonicalPath()的不同

public static void test2() throws Exception{
        File file 
= new File("..\\src\\test1.txt");
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }

得到的结果

D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt

可以看到CanonicalPath不但是全路径,而且把..或者.这样的符号解析出来。
3,getCanonicalPath()和自己的不同。
就是解释这段话:

表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。 

单下边这段代码是看不到结果的,要配合一定的操作来看。下边操作步骤,同时讲解

public static void test3() throws Exception{
        File file 
= new File("D:\\Text.txt");
        System.out.println(file.getCanonicalPath());
    }

步骤:
确定你的系统是Windows系统。
(1),确定D盘下没有Text.txt这个文件,直接执行这段代码,得到的结果是:

D:\Text.txt

注意这里试大写的Text.txt
(2)在D盘下建立一个文件,名叫text.txt,再次执行代码,得到结果

D:\text.txt

同样的代码得到不同的结果。
同时可以对比getAbsolutePath()看看,这个得到的结果是一样的。

原因:
window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,所以在windows上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。

三、最后:
1,尝试在linux下执行上边的步骤,两次打印的结果是相同的,因为linux是大小写敏感的系统。
2,手动删掉test.txt,然后尝试执行下边代码

public static void test4() throws Exception{
        File file 
= new File("D:\\Text.txt");
        System.out.println(file.getCanonicalPath());
        File file1 
= new File("D:\\text.txt");
        file1.createNewFile();
        file 
= new File("D:\\Text.txt");
        System.out.println(file.getCanonicalPath());
    }

 

public static void test3() throws Exception{
        File file1 
= new File("D:\\text.txt");
        file1.createNewFile();
        File file 
= new File("D:\\Text.txt");
        System.out.println(file.getCanonicalPath());
    }

执行上边两个函数,看看结果,然后思考一下为什么?
1,的结果是两个大写,
2,的结果试两个小写
连续两个大写的,是否跟上边的矛盾 ?
这是因为虚拟机的缓存机制造成的。第一次File file = new File("D:\\Text.txt");决定了结果.

分享到:
评论

相关推荐

    Java中getPath与getAbsolutePath区别.pdf

    _java 中 getPath 与 getAbsolutePath 的区别_ 在 Java 中,File 类表示的是文件和目录路径的抽象形式。其中,getPath() 和 getAbsolutePath() 两个方法都是用于获取文件或目录的路径,但是它们之间存在着一些区别...

    File的getPathgetAbsolutePath和getCanonicalPath的不同.pdf

    Java中File类提供了三个相关的方法:getPath、getAbsolutePath和getCanonicalPath,它们都可以获取文件或目录的路径,但是它们的作用和返回结果不同。 getPath方法: getPath方法将抽象路径名转换为一个路径名字符...

    java file类的方法

    ### Java File 类的方法详解 ...以上是`java.io.File`类中的构造方法和一些常用的方法。这些方法为我们提供了对文件系统进行操作的强大工具。掌握这些方法的用法对于进行文件操作非常重要。希望本文能够帮助您更好地...

    java File类的一些知识

    本文将深入探讨 `File` 类中的 `getPath()`, `getAbsolutePath()`, 和 `getCanonicalPath()` 方法之间的区别及其应用场景。 ### 一、`File` 类简介 `java.io.File` 类是Java标准库中的一个基础类,用于封装文件或...

    java的file类

    Java中的`File`类是Java.io包中的核心类,它用于表示文件和目录路径名的抽象表示。在Java中,`File`类并不是用来存储文件内容的,而是用来操作文件和目录,比如创建、删除、重命名文件,以及获取文件的各种属性信息...

    Java中获取文件路径的几种方式

    Java中的`File`类提供了丰富的API来处理文件和目录路径。例如,通过`this.getClass().getResource()`方法可以获取资源文件的路径。 ##### 示例代码: ```java File f = new File(this.getClass().getResource("/")....

    File_java_

    在Java编程语言中,文件操作是程序...总之,`File`类是Java中处理文件和目录的基础,熟练掌握其用法对于编写涉及文件操作的Java程序至关重要。在实际编码过程中,要根据需求灵活运用这些方法,确保代码的健壮性和效率。

    File类基本用法java-Eclipse

    Java中的`File`类是Java.io包中的核心类,它被用来封装文件和目录路径名。这个类提供了许多方法来操作文件和目录,包括创建、删除、重命名、获取属性等。下面,我们将深入探讨`File`类的基本用法。 1. 创建文件对象...

    java 获取当前路径

    Java 获取当前路径是 Java 编程中一个常见的需求,下面我们将讨论如何在 Java 中获取当前路径。 方法一:使用 System.getProperty() 函数 使用 System.getProperty() 函数可以获取当前路径,该函数可以获取 Java ...

    Java基础知识小结

    2. **file的getPath, getAbsolutePath, getCanonicalPath的不同**: 同上,`getPath()`返回基本路径,`getAbsolutePath()`提供完整绝对路径,`getCanonicalPath()`则处理了路径中的相对引用和符号链接。 3. **int ...

    565.563.JAVA基础教程_泛型与File-为什么要使用泛型(565).rar

    在Java中,泛型和File类是两个重要的概念,对于提升代码的类型安全性、可读性和复用性起着至关重要的作用。 **泛型(Generics)** 泛型是Java 5引入的一个重要特性,它的主要目的是提高代码的类型安全性和减少类型...

    Java中获取当前路径的几种方法总结

    下面将详细介绍几种在Java中获取当前路径的方法。 1. 使用`System.getProperty()`函数: `System.getProperty("user.dir")`是获取当前工作目录的常用方式。这里的`user.dir`是一个系统属性,它指向了Java进程启动...

    对File的各种操作

    在Java编程语言中,`java.io.File`类是用于文件和目录操作的核心工具。这个类提供了许多方法,让我们能够创建、删除、重命名文件以及获取文件的属性信息。以下是对`File`类进行各种操作的详细说明: 1. **创建文件*...

    Java基础学习27.pdf

    `getPath()`, `getAbsolutePath()`, `getCanonicalPath()`分别获取文件的路径、绝对路径和规范路径;`list()`, `listFiles(FileFilter)`列出目录下的文件和子目录;`listRoots()`则返回系统的根目录列表。 学习Java...

    关于Java文件路径问题

    它提供了许多方法来处理文件路径,如`exists()`检查文件是否存在,`createNewFile()`创建新文件,`mkdirs()`创建多级目录,以及`getPath()`、`getAbsolutePath()`和`getCanonicalPath()`获取各种形式的路径。...

    java_IO操作

    - `File`类提供了解析、合并路径的方法,例如`getPath()`, `getAbsolutePath()`, `getCanonicalPath()`等。 10. **NIO (非阻塞I/O)**: - Java NIO(New I/O)提供了与传统IO不同的I/O模型,允许非阻塞读写操作,...

    学习笔记 java\CoreJava笔记\CoreJava_day20

    Java中的`File`类是处理文件和目录的核心类,它位于`java.io`包中。`File`类提供了丰富的功能,允许我们创建、删除、重命名文件和目录,以及检查文件属性,如是否存在、是否可读写等。下面将详细阐述`File`类的一些...

Global site tag (gtag.js) - Google Analytics