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

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应用程序的关键 。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 在线帮助,linux获取在线帮助

Linux系统的帮助文档非常丰富。帮助手册提供命令的使用说明。比如你若是想了解ls命令的用法,只需运行:$ man ls帮助手册旨在提供基础知识和参考信息,有时会有一些实例和交叉索引,但是基本没有那种教程式的文档。帮助手册会按系统排…

linux中samba详解,详解linux系列之samba的安装及配置

上篇博文中我介绍了FTP,今天我们来介绍一下samba实现文件共享。这个比FTP更好点,因为对用户的权限可以通过samba权限和系统权限交叉使用,取最严格的。可以让windows更容易的从linux系统上存取文件,还有samba也可以让linux上面的打…

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务

微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了Apache Kafk…

单片机控制三相异步电动机正反转c语言程序,请用PLC控制一台普通三相异步电动机的正反转控制,设计其控制程序梯形图及主电路...

PLC的编程方法及步骤。总的步骤主要有三步:一、根据电路图选择电器元件及PLC的型号,其中包括确定PLC的输入输出点位、确定PLC的输出类型,也需考虑某些功能是否能扩展、价格等;二、设计好PLC控制的外围元器件的原理图。这里面包括有…

0x80070003系统找不到指定路径_Win7系统中gpedit.msc找不到应该如何解决?

Win7x系统gpedit.msc找不到怎么办?最近有用户反映,电脑当中的gpedit.msc找不到了,gpedit.msc就是我们的策略组,对于我们的电脑来说是非常重要的,那么gpedit.msc找不到应该如何解决呢?接下来就为大家分享win…

c语言回文数递归,c语言问题~~~回文数!!急,拜托高人指点!!

满意答案wyhjjq12014.01.27采纳率:53% 等级:12已帮助:10413人添加上满足你补充要求的C程序:#includeint palindrome(unsigned int x){unsigned int y;unsigned int s0;yx;while(y>0){ss*10y%10;yy/10;}if(sx)return 1;elsereturn 0;}vo…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第一部分)

jboss架构(文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 ( John Hurlocker)合着) 在这周的技巧中,我们将放慢速度,并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xf…

snvr client怎么使用_TCGA官方工具gdc-client.exe的安装及使用

在TCGA数据下载过程中,会提示使用Download a manifest for use with theGDC Data Transfer Tool​gdc.cancer.gov实现过程:1.下载gdc-client的压缩文件;gdc-client_v1.4.0_Windows_x64.zip2.将上述压缩文件copy到一个英文文件名称的文件夹内&…

js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板

Vuestic Admin 简介vuestic admin是一款流行,免费与美妙的基于Vue.js开发出来的管理模板,包括38以上个定制用户界面组件,由Epicmax开发,由Vasili Savitski设计。目前github star 6K, 最新版本2.0.0, MIT许可协议。为什么选择Vuestic AdminVue…

linux内核之旅ppt_微软Windows 10防病毒现已可用Linux上

微软在推出预览版应用程序几个月后,刚刚宣布了适用于Linux的Microsoft Defender ATP的全面可用性。“ Microsoft Defender ATP将Linux添加到现有的本机支持平台的选择中,对我们所有客户而言都是重要的时刻。它使Microsoft Defender安全中心成为真正的统一…

Spring再次涵盖了您:继续进行消费者驱动的消息传递合同测试

在上一篇文章中,我们已经开始讨论基于消息的通信中的消费者驱动的合同测试 。 在今天的帖子中,我们将在测试工具箱中包含另一个工具,但是在此之前,让我对显微镜下的系统进行快速回顾。 它有两项服务, 订单服务和货运服…

Android两个tab吸顶,Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每

Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每Android scrollView和viewpager嵌套 指示器吸顶 根据viewpager每个页面的内容适配高度这几天 朋友问我了个问题 有个特别的需求 页面如下就是当viewpager里面的当前页面内容足够多的时候 要去能滑上去 并且指示…

html5input输入框设置无边框_芯片充电两大改变,无看点的iPad8,上手体验发现并不简单!...

前不久,苹果召开了秋季新品发布会,但与以往不同的是,往年本该成为“配角”的iPad,没想到此次成为了主角之一,面对着外观不变仅升级芯片新发布的iPad 8,大家好像没有过多的激情,”旧瓶装新酒“的…

android系统三防机,这才是真正给老人设计的智能手机:三防+安卓系统+超大音量,AGM H2...

原标题:这才是真正给老人设计的智能手机:三防安卓系统超大音量,AGM H2在这个互联网时代,很多智能手机厂商,都是在硬件配置上面进行比拼,包括但是不限于处理器的升级,摄像头的升级,散…

spring aop 注释_使用Spring AOP,自定义注释和反射为您的应用程序审核基础结构

spring aop 注释下一篇文章将演示如何使用Spring AOP和注释编写简单的审计。 审核机制将是干净,高效且易于维护的(和Kewwl!)。 我将在用户管理系统上演示我的示例(假设您具有反射和AOP的一般知识)。 我们…

springboot 打包_springboot打包-体积太大怎么办

springcloud项目打包动辄100多兆,在文件上传部署的时候非常耗时,多数情况下是毫无意义的耗时,因为依赖包很多情况下不需要改变,只是修改了业务逻辑,那么每次打包上传的时间都浪费了,尤其在开发环境下&#…

.vue文件_Spring Boot 2.x(十六):玩转vue文件上传

为什么使用Vue-Simple-Uploader 最近用到了Vue Spring Boot来完成文件上传的操作,踩了一些坑,对比了一些Vue的组件,发现了一个很好用的组件——Vue-Simple-Uploader,先附上gayhub的,再说说为什么选用这个组件&#xf…

成为Java流专家–第2部分:中级操作

就像魔术棒一样,中间操作将一个Stream转换为另一个Stream。 这些操作可以无穷无尽的方式组合在一起,以可读有效的方式执行从简单到高度复杂的任务。 本文是五分之二,其中还有一个GitHub存储库,其中包含每个单元的说明和练习。 第…

HTML怎么在li中加select标签,自定义UL LI选择框似乎在其他HTML元素后面

我似乎无法弄清楚为什么我的自定义UL LI选择框出现在其他HTML元素后面。你如何解决这个问题,当用户点击选择框时,它会出现在其他页面元素的顶部?这里是手头的问题的一个画面: 下面是一个描绘所期望的结果: 这里是有问题…

java初学者面试_Java面试的前50个问题,面向初学者和经验丰富的程序员

java初学者面试您可以参加任何Java面试,无论是大四还是中级,经验或新来的人,一定会看到线​​程,并发和多线程中的几个问题。 实际上,这种内置的并发支持是Java编程语言的最强优势之一,并帮助它在企业界和程…