`

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");决定了结果.

 

文章出处:http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html

 

分享到:
评论

相关推荐

    2025年软考高级 - 信息系统项目管理师考试备考全攻略

    2025年软考高级 - 信息系统项目管理师考试备考全攻略

    MySQL 5.7从入门到精通 第23章 新闻发布系统数据库设计 共6页.pptx

    【课程大纲】 第1章 初始MySQL 共19页.pptx 第2章 MySQL的安装与配置 共14页.pptx 第3章 数据库的基本操作 共11页.pptx 第4章 数据表的基本操作 共26页.pptx 第5章 数据类型和运算符 共17页.pptx 第6章 MySQL函数 共76页.pptx 第7章 查询数据 共48页.pptx 第8章 插入、更新与删除数据 共10页.pptx 第9章 索引 共11页.pptx 第10章 存储过程和函数 共19页.pptx 第11章 视图 共20页.pptx 第12章 触发器 共11页.pptx 第13章 用户管理 共25页.pptx 第14章 数据备份与还原 共21页.pptx 第15章 MySQL日志 共22页.pptx 第16章 性能优化 共18页.pptx 第17章 MySQL Workbench5.2 的使用 共15页.pptx 第18章 MySQL Replication 共27页.pptx 第19章 MySQL Cluster 共49页.pptx 第20章 MySQL管理利器——MySQL Utilities 共5页.pptx 第21章 读写分离的利器——MySQL Proxy 共5页.pptx 第22章 PHP操作MySQL数据库 共7页.pptx 第23章 新闻发布系统数据库设计 共6页.pptx 第24章 论坛管理系统数据库设计 共6页.pptx

    高分springboot毕设+vue的游戏创意工坊与推广平台的设计与实现_orv论文-Java源码.zip

    本项目是一个基于Spring Boot和Vue的游戏创意工坊与推广平台的设计与实现。该项目旨在为游戏开发者和玩家提供一个集中的平台,使他们能够分享创意、展示作品并获取反馈。平台的核心功能包括游戏创意的提交与管理、游戏作品的展示与评价、用户间的互动交流以及推广活动的组织与管理。 在技术实现上,后端采用Spring Boot框架,利用其快速开发和部署的特点,确保系统的稳定性和高效性。前端则使用Vue.js,以其灵活的数据绑定和组件化开发方式,为用户提供流畅的交互体验。数据库设计充分考虑了数据的安全性和扩展性,以支持大量用户和作品的存储需求。 此外,项目还集成了多种实用工具和插件,如用户认证、权限管理、文件存储等,以提升平台的整体功能和用户体验。通过这个项目,用户不仅能够锻炼自己的编程技能,还能深入了解游戏开发和运营的全过程。

    考研助手--论文.zip

    基于SSM的毕业设计源码

    C# AutoCAD DWG打印成PDF 代码

    自己写的转PDF代码,调试,可用。

    PowerQuery的使用与M语言介绍.docx

    PowerQuery的使用与M语言介绍.docx

    【java毕业设计】小说阅读平台的设计(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

    高分springboot毕设+vue的实验室开放管理系统-Java源码.zip

    本项目是一个基于Spring Boot和Vue的实验室开放管理系统,旨在为计算机相关专业的大学生提供一个实践平台,同时也适合Java学习者进行项目实战练习。系统集成了用户管理、实验室预约、设备管理、实验课程安排等多项功能,通过现代化的前后端分离架构,实现了高效、便捷的实验室资源管理。 在用户管理方面,系统支持多种角色的创建与管理,包括管理员、教师和学生,每种角色都有其特定的权限和功能。实验室预约功能允许学生根据实验室的空闲时间和设备的可用性进行预约,有效避免了资源冲突。设备管理模块则详细记录了实验室中各种设备的状态和维护历史,方便管理人员进行设备的调度和维护。 此外,系统还提供了实验课程安排的功能,教师可以在线发布实验课程信息,学生可以查看课程安排并进行报名。整个系统的设计注重用户体验和操作便捷性,前端采用Vue框架,提供了直观的用户界面,后端则利用Spring Boot实现了强大的业务逻辑处理能力。

    22个财务报告PPT模板

    22个财务报告PPT模板

    ISO 24342 2024.pdf

    ISO 24342 2024.pdf

    【java毕业设计】西山区家政服务网站设计与开发(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

    高分springboot毕设+vue高校创新创业课程体系的设计与实现_rmuhq论文-Java源码.zip

    本项目是一个基于Spring Boot和Vue的高校创新创业课程体系设计与实现系统,旨在为计算机相关专业的大学生提供一个全面的创新创业课程学习与实践平台。项目的主要功能涵盖课程管理、学习资源上传与下载、学生互动交流以及课程评价反馈等多个方面。 在技术架构上,后端采用Spring Boot框架,以其快速开发和部署的特点,确保系统的稳定性和高效性;前端则运用Vue.js,实现界面的动态交互和良好的用户体验。此外,系统还集成了数据库管理技术,用以存储和管理大量的课程信息和用户数据。 开发此项目的目的在于响应当前高等教育中对于创新创业能力培养的迫切需求,通过信息化手段提升教学质量和效率,同时为学生提供一个自主学习和交流的平台,激发他们的创新思维和实践能力,为未来的职业发展奠定坚实基础。

    ISO 19983 2024.pdf

    ISO 19983 2024.pdf

    解决 pip 安装过程中出现的SyntaxError invalid syntax错误技巧

    内容概要:当遇到‘pip install xxx’命令时出现 SyntaxError: invalid syntax 错误时,文中总结了多个可能的原因以及解决方案,包括确认命令执行环境、Python 与 pip 版本一致性检查、正确安装 pip、确保命令格式无误、使用虚拟环境规避版本冲突、合理使用代理与镜像源加快下载等问题。 适合人群:适用于有一定 Python 开发经验,尤其是经常需要利用 pip 安装外部库的技术工作者。 使用场景及目标:旨在帮助开发者快速诊断并修复在 pip 安装过程中可能出现的各种 SyntaxError 类型的异常,提高工作效率和项目稳定性。 其他说明:文档还提供了几个典型的报错实例及其对应的解决策略,有助于深入理解常见问题背后的具体机制。同时强调,在解决问题前要先排除自身操作失误的可能性,比如是否不小心在 Python 解释器内部运行了本来应当在外壳命令行下执行的操作等基本常识点也是不可忽视的重要方面。

    高分springboot毕设+vue就业系统-Java源码.zip

    本项目是一个基于Spring Boot和Vue.js开发的就业系统,旨在为计算机相关专业的大学生提供一个实践和学习的平台,同时也为即将步入职场的毕业生提供就业信息和服务。项目涵盖了从用户管理、职位发布、简历投递到在线面试等一系列功能,旨在构建一个全面的就业服务体系。 在技术实现上,后端采用Spring Boot框架,利用其快速开发和部署的特点,确保系统的稳定性和高效性。Spring Boot的自动配置和微服务支持,使得系统在扩展性和维护性方面表现出色。前端则使用Vue.js,通过其灵活的数据绑定和组件化开发,实现了用户界面的友好和响应式设计,提升了用户体验。 此外,项目还包括了数据分析模块,通过收集和分析用户的就业数据,为学生提供职业规划的参考和建议。系统还集成了第三方服务,如邮件通知和短信验证,以增强用户体验和系统的实用性。通过这个项目,学生不仅可以学习到实际的开发技能,还能了解就业市场的动态,为未来的职业生涯做好准备。

    python圣诞树代码动态3d.txt

    python圣诞树代码动态3d

    基于python3.x与Django2.x开发的在线教育平台源代码+数据库

    基于python3.x与Django2.x开发的在线教育平台源代码+数据库

    茶文化推广系统&java&基于spingboot茶文化推广系统设计与实现

    茶文化推广系统&java&基于spingboot茶文化推广系统设计与实现

    沉浸式戏曲文化体验&java&基于springboot沉浸式戏曲文化体验系统设计与实现

    沉浸式戏曲文化体验&java&基于springboot沉浸式戏曲文化体验系统设计与实现

    “雅乐”私人牙科诊所管理系统的设计与实现ssm.zip

    基于SSM的毕业设计源码

Global site tag (gtag.js) - Google Analytics