file.getpath

File API在Java中非常重要,因为它使文件系统可以访问Java程序。 尽管Java的文件API丰富,但是使用它们时仍需要了解很多细节。 关于文件路径的常见查询程序员之一是getPath()getCanonicalPath()getAbsolutePath()方法之间的区别,为什么有三种获取文件路径的方法以及如果调用getPath()代替getCanonicalPath()会发生什么情况? 。

顺便说一句,在理解getPath(),getAbsolutePath()和getCanonicalPath()之间的区别之前,让我们了解这些方法背后的概念,即path,absolute path和canonical path之间的区别 。 通常,路径是到达文件系统中特定文件或目录的方式,它可以是绝对路径(也称为完整路径),也可以是相对的,例如相对于当前位置。

绝对路径定义了从文件系统的根目录(例如Windows中的C:\\或D:\\)以及从/的基于UNIX的操作系统(例如Linux或Solaris)中的路径。 规范路径有点棘手,因为所有规范路径都是绝对的,反之亦然 。 它实际上定义了从文件系统根目录到文件的唯一绝对路径。 例如,C://temp/names.txt在Windows中是names.txt的规范路径,而/home/javinpaul/test/names.txt在Linux中是规范路径。 另一方面,同一文件可以有很多绝对路径,包括刚刚看到的规范路径。 例如,Windows中相同文件的另一个绝对路径可以是C://temp/./names.txt;。 类似地,在UNIX / home / javinpaul / test /./ names.txt中,是同一文件的另一个绝对路径。 所以可以这样说,绝对路径可能包含元字符之类的。 和..代表当前目录和父目录。 在本文的其余部分,我们将通过查看返回给特定文件的值来了解getPath(),getAbsolutePath()和getCanonical()路径之间的区别。

在UNIX,Windows,Linux或任何文件系统中处理文件时,您通常会听到术语,绝对,规范和相对路径。 这是在脚本或程序中引用任何特定文件的三种常用方法。 如果您是一名程序员,则编写脚本,那么您就会知道使用绝对路径如何使您的脚本僵化和不灵活,使用绝对路径实际上是无效的,而众所周知,脚本中的硬编码路径是程序员字典中不良的编码做法之一。 。 绝对路径是指向特定文件(例如C:\ temp \ abc.txt)的完整路径。 绝对路径名的定义也取决于系统。 在UNIX系统上,如果路径名的前缀为“ /”,则该路径名是绝对的。 在Win32系统上,如果路径名的前缀是驱动器说明符,后跟“ \\”,或者其前缀是“ \\”,则该路径名是绝对路径。

例如,我们有两个目录:temp和temp1,而test.txt文件位于temp目录中。

C:\temp
C:\temp1

在Windows下的Java中,您可能具有以下可能的绝对路径,它们引用同一文件test.txt。

C:\temp\test.txt
C:\temp\test.txt
C:\temp\TEST.TXT
C:\temp\.\test.txt
C:\temp1\..\temp\test.txt

另一方面,相对路径是相对于您所在目录的目录,称为当前目录。 因此,如果您在上述目录中,则如果将文件test.txt作为相对文件进行引用,则它假定您所在的目录相同。当执行../时,它将返回一个目录,也称为父目录。 规范路径要难一些。 对于初学者,所有规范路径都是绝对路径(但并非所有绝对路径都是规范路径)。 系统上存在的单个文件可以具有许多引用该文件的路径,但是只有一个规范路径。 Canonical为给定文件提供了唯一的绝对路径。 如何实现这一点的细节可能取决于系统。 对于上面的示例,我们只有一个规范路径:C:\ temp \ test.txt,请记住,在Java中,您可以使用UNIX风格的正斜杠(/)使用路径分隔符,甚至可以使用file获取操作系统路径分隔符。分隔符系统属性,是编写真正与平台无关的Java应用程序的关键 。

一旦您了解了绝对路径,规范路径和相对路径之间的差异,就很容易区分这三种方法,因为它们实际上返回的是路径,绝对路径和规范路径。 简而言之,这是它们之间的主要区别:

  1. 第一个方法getPath()返回一个String,该String表示用于创建关联的File对象的路径,并且它可能相对于当前目录。
  2. 第二种方法getAbsolutePath()根据当前目录(如果是相对的)将其解析后返回路径字符串,从而生成完全限定的路径。
  3. 第三种方法getCanonicalPath()在针对当前目录解析任何相对路径后返回路径字符串,并删除任何相对路径元素(例如(。和..)),以及任何文件系统链接以返回文件系统认为是规范的路径表示引用它指向的文件系统对象。

还要记住,以上两个方法中的每个方法都有一个File等效项,该等效项返回相应的File对象,例如getAbsoluteFile()和getCanonicalFile(),它们返回相同的内容。

下面的示例说明了到同一个文件的方式有很多不同的路径(和绝对路径),它们都具有完全相同的规范路径。 因此,如果您想知道两个不同的路径是否指向同一文件,则规范路径很有用。

import java.io.File;/*** Java program to show difference between path, absolute path and canonical* path related to files in Java. File API provides three methods to* java.io.File class getPath(), getAbsolutePath() and getCanonicalPath() and* this program just explain what those method returns.** @author Javin Paul*/
public class PathDemo {public static void main(String args[]) {System.out.println("Path of the given file :");File child = new File(".././Java.txt");displayPath(child);File parent = child.getParentFile();System.out.println("Path of the parent file :");displayPath(parent);}public static void displayPath(File testFile) {System.out.println("path : " + testFile.getPath());System.out.println("absolute path : " + testFile.getAbsolutePath());try {System.out.println("canonical path : " + testFile.getCanonicalPath());} catch (Exception e) {e.printStackTrace();}}}Output:
Path of the given file :
path : ..\.\Java.txt
absolute path : C:\Users\WINDOWS 8\workspace\Demo\..\.\Java.txt
canonical path : C:\Users\WINDOWS 8\workspace\Java.txtPath of the parent file :
path : ..\.
absolute path : C:\Users\WINDOWS 8\workspace\Demo\..\.
canonical path : C:\Users\WINDOWS 8\workspace

这就是Java中的getPath(),getAbsolutePath()和getCanonicalPath()之间的区别。 在课程中,我们还学习了路径,绝对路径和规范路径之间的区别。 您需要记住的是,getPath()为您提供了创建File对象的路径,该路径可能是相对的,也可能不是相对的。 getAbsolutePath()给出文件的绝对路径; getCanonicalPath()为您提供文件的唯一绝对路径。 值得注意的是,可能有大量指向同一文件的绝对路径,但只有一个规范路径。

翻译自: https://www.javacodegeeks.com/2014/08/difference-between-getpath-getcanonicalpath-and-getabsolutepath-of-file-in-java.html

file.getpath

file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...相关推荐

  1. java中static、final 和 static final之间的区别

    java中static.final 和 static final之间的区别 static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类) 由于静态属性和方法是属于该类的所有对象的,所 ...

  2. java中双引号和单引号_Java中的单引号和双引号之间有区别吗?

    问题 Java中的单引号和双引号之间有区别吗? #1 热门回答(126 赞) 对于literalchar使用单引号,对于literalString使用双引号,如下所示: char c = 'a'; S ...

  3. 【整理】Python中的re.search和re.findall之间的区别和联系 + re.finall中带命名的组,不带命名的组,非捕获的组,没有分组四种类型之间的区别

    之前自己曾被搞晕过很多次. 后来使用这些函数次数多了之后,终于比较清楚的弄懂了两者之间的区别和关系了. 尤其是一些细节方面的注意事项了. 在看下面的总结和代码之前,请先确保你对如下基本概念已经有所了解 ...

  4. java中File类中list()和listFiles()方法区别

    list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...

  5. file java_Java中File常用的方法汇总

    packagecom.file;importjava.io.File;importjava.io.IOException;/*** file相关的方法 * *@authorcoco_xu **/ pu ...

  6. Pandas中map,applymap和apply方法之间的区别

    本文翻译自:Difference between map, applymap and apply methods in Pandas Can you tell me when to use these ...

  7. php中this,self,parent三个关键字之间的区别(转载)

    PHP5是一具备了大部分面向对象语言的特性的语言,比PHP4有 了很多的面向对象的特性,但是有部分概念也比较难以理解,这里我主要谈的是 this,self,parent三个关键字之间的区别.从字面上比 ...

  8. sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别

    sql语句截断 We get the requirement to remove the data from the relational SQL table. We can use both SQL ...

  9. C语言中指针*p、p以及p之间的区别以及*p和**p的区别

    *p.p以及&p之间的区别 假设我们定义一个指针p. 那么会经常使用到三个符号: 1,p: 2,*p; 3,&p; p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来 ...

最新文章

  1. java调优 视频_Java优化高性能高并发+高并发程序设计视频教程
  2. Numpy中np.dot()与np.matmul()的区别(矩阵乘积、矩阵乘法、矩阵相乘)
  3. 通过Windows API 创建窗口的过程理解windows消息机制
  4. PHP做二次开发:ThinkCMF门户应用安装
  5. 提高CSS文件可维护性的五种方法
  6. 35 MM配置-采购-采购订单-设置价格差异的容差限制
  7. 如何将外链接向内连接转换?
  8. openssl学习笔记--CA及https网站证书配置
  9. ProGuard正确下载网址
  10. 计算机房的标准和规定,机房建设标准和规范.doc
  11. SSRF学习(5)gopher协议上传文件
  12. Sinkhorn算法
  13. graphs菜单_Graphs Made Easy-统计图绘制软件下载 v4.1.0.0 官方版 - 安下载
  14. 泛函分析笔记(十七) 弱偏导数
  15. 两百万美元“NFT”消失的惨案
  16. WINCE 注册表修改
  17. 一只小北极熊(结构体
  18. Idea快速入门指南
  19. 五、无限法则roe-滑雪高级进阶训练
  20. Jmeter操作与相关应用

热门文章

  1. luoguSP1805,POJ2559-Largest Rectangle in a Histogram【单调栈】
  2. ssl1763-观光旅游【最小环,Floyd,dijkstra】
  3. 纪念中学15-5(=10)天感想
  4. F - Sugoroku2(期望dp)
  5. 汇编语言(一)之反转字符串输出
  6. Redis 5.0 正式版发布了,19 个新特性
  7. 如何快速搭建一个免费的,无限流量的Blog
  8. JavaFX UI控件教程(十七)之Slider
  9. 非阻塞线程安全列表——ConcurrentLinkedDeque应用举例
  10. JAVA反射修改常量,以及其局限