点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | 公众号「码农小胖哥」

1. 前言

Java 开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。

2. 文件的路径

文件的路径通常有 相对路径 与 绝对路径

2.1 相对路径

以当前文件为基准进行一级级目录指向被引用的资源文件。在 Java 代码中以当前运行的代码所在的位置为参照位置,只要被引用的文件相对于引用的文件的位置不变就可以被读取到。一旦改变相对位置就无法被读取到。

2.2 绝对路径

文件在文件系统中真正存在的路径,是指从硬盘的根目录(Windows为盘符)开始,进行一级级目录指向文件(从根目录一层层读写)。绝对路径顾名思义就是绝对的地址,就像你只要告诉别人你家的门牌号,他就能找到你家。而不是相对位置你告诉他在老王家的隔壁一样。

2.3 路径速记符

我们经常看到一些文件目录路径使用一些符号来简写,这里有必要总结一下(以类 Unix系统为例):

标识符 说明
../ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录
/ 表示根目录
~ 当前用户目录, mac 下为 /Users/username,而 win10下为c:\users\username

Windows 下基本将 / 改为 \ 即可。

3. Java 中读取文件

我们先来声明一个测试路径:

foo
|_src
| |_Test.java
| |_app.yml

其中 Test.java 用来编写读取 app.yml 文件的逻辑。Java 中通过java.io.File 来进行文件操作。并且提供了以下三个方法来获取文件的路径。

3.1 getPath

该方法返回文件抽象路径名的字符串形式。实际上就是传递给 File 构造函数的路径名。

因此,如果 File 对象是使用相对路径创建的,则返回的值也将是相对路径。如果是绝对路径就返回绝对路径。

 File file = new File("./app.yml");# 输出 path = ./app.ymlSystem.out.println("path = " + file.getPath());# 如果为绝对路径File file = new File("/Users/dax/IdeaProjects/foo/src/app.yml");# 输出 path = path = /Users/dax/IdeaProjects/foo/src/app.ymlSystem.out.println("path = " + file.getPath());

3.2 getAbsolutePath

该方法返回文件的绝对路径。**请注意!这里是有大坑的。**如果你的文件在 Java 工程内,路径是按照编译后的路径计算的。

File file = new File("./app.yml");
# absolutePath = /Users/dax/IdeaProjects/foo/./app.yml
System.out.println("absolutePath = " + absolutePath);

同时我们发现该方法只解析当前目录(上面代码所在的目录)的相对路径,如果初始化中的路径包含了 2.3 章节 中的 速记符 ,速记符 将不会被解析。

因为速记符的存在,一个文件在文件系统中的 绝对路径 可以有很多个。

3.3 getCanonicalPath

速记符 不被解析有时候是很痛苦的事,我们可能需要知道具体的路径。getCanonicalPath() 方法解决了这个问题。

File file = new File("./app.yml");
# canonicalPath = /Users/dax/IdeaProjects/foo/app.yml
System.out.println("canonicalPath = " + file.getCanonicalPath());

由于getCanonicalPath()读取的是文件系统,因此会降低性能。如果我们确定没有使用速记符,并且驱动器号大小写已标准化(如果使用Windows OS),我们应该首选使用getAbsoultePath(),除非你的项目中必须使用 getCanonicalPath()

规范路径(不包含速记符)对于一个固定位置的文件来说是唯一的。

本文通过OpenWrite的Markdown转换工具发布

关注我,回复“加群”加入各种主题讨论群

  • Tomcat 曝高危漏洞:可利用读取webapp下任意文件

  • 除了Postman之外,居然还有个Postwoman...

  • 实战 | 某小公司项目环境部署演变之路

  • 真香 | 有了这个神器,学习 Vim 终于不难了!

  • 代码生成器:IDEA 强大的 Live Templates

Java 中几种获取文件路径的方式相关推荐

  1. java 输出文件到mac路径_Java 中几种获取文件路径的方式

    原标题:Java 中几种获取文件路径的方式 1. 前言 Java开发中我们经常要获取文件的路径,比如读取配置文件等等.今天我们就关于文件的路径和如何读取文件简单地探讨一下. 2. 文件的路径 文件的路 ...

  2. java获取项目中的路径_java中几种获取项目路径方式

    转自http://caodaoxi.iteye.com/blog/1234805 在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是Web ...

  3. Mac获取文件路径的方式

    Mac获取⽂件路径的四种⽅法 很多mac⽤户在初次使⽤macOS系统时候路径是⽐较难找的,毕竟macOS和Windows还是有本质却不必的,那么像修改host⽂件以及查找 APP⽂件我们改这么版呢?以 ...

  4. python 如何获取文件路径_Python如何获取文件路径/目录

    一.获取文件路径实现 1.1 获取当前文件路径 import os current_file_path = __file__ print(f"current_file_path: {curr ...

  5. 在Java中实现SFTP协议文件传输的两种解决方案

    在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...

  6. Java获取文件路径

    Java获取文件路径 1.获取当前文件所在的包名 2.获取工程文件夹所在的绝对路径 3.获取当前class文件所在的绝对路径 1.获取当前文件所在的包名 类名.class.getPackage().g ...

  7. multipartfile 获取文件路径_Excel工作表中的20个信息函数,获取文件路径,单元格格式等!...

    点击上方"Excel函数公式"免费订阅 Excel工作表中的信息函数主要用于返回某些指定单元格或区域的信息,例如获取文件路径,单元格格式信息或操作系统信息等等.今天,小编带大家掌握 ...

  8. 在某个文件目录中打开cmd的方法及快速获取文件路径的方法

    1. 在文件目录中打开cmd的方法 例如,我需要在下图路径中打开cmd. 点击一下该文件目录的浏览框. 输入cmd. 点击回车,就完成了在文件目录中打开cmd. 2. 快速获取文件路径的方法 例如我想 ...

  9. MAC怎么获取文件路径 MAC获取文件路径的四种方法

    MAC怎么获取文件路径介绍 方法一:最简单的方法  右键文件或者文件夹,选择显示简介 2在弹出来的窗口中找到位置,即为路径,在mac 10.10之前的系统是正常的路径,10.10开始是小箭头代替/显示 ...

最新文章

  1. Windows客户端C/C++编程规范“建议”——函数
  2. redhat 复制文件夹及子文件夹_python文件夹怎么操作呢??(建议详读)
  3. Android 亲测源码分享
  4. 第一章 java多线程
  5. 《WebGL编程指南》学习笔记——4.绘制一个点
  6. 微信小程序底部导航栏小效果
  7. (附源码)小程序 口腔诊所预约系统 毕业设计 201738
  8. java超市进销存系统_基于SSM的超市进销存管理系统、基于JavaWeb的超市进销存管理系统...
  9. mysql全称量词_数据库整理(三) SQL基础
  10. 使用ECS和OSS搭建个人网盘(阿里云官方)
  11. 信道容量迭代算法验证
  12. 数学建模笔记——评价类模型(二)
  13. size_t、ssize_t、int、long的比较
  14. PHP开发微信商家转账到零钱接口
  15. 全国计算机二级考试web程序,2018年全国计算机二级web程序考试考什么内容
  16. 腾讯企业邮箱管理权限可实现什么?
  17. 叉车AGV车载系统模块详解
  18. 文献记录(part23)--Learn to model blurry motion via directional similarity and filtering
  19. html 实现格子效果图,css 实现的九宫格图片展示
  20. 没有人会告诉你的小技巧,自学视频剪辑第一步要做什么?

热门文章

  1. linux shell脚本中调用另一个shell脚本
  2. ddos中的tcp反射攻击技术分析
  3. C/MFC如何获得应用程序当前路径(整理)
  4. Linux下基于socket多线程并发通信的实现
  5. 大数据教父Micheal Stonebraker告诉你大数据的秘密
  6. java shiro 访问频率_java shiro配置记住密码功能 RememberMe
  7. openstack(Queens版) 安装FWaaS
  8. 钉钉如何调整组织架构_阿里宣布新一轮组织架构调整:明确大文娱一号位,钉钉进入阿里云...
  9. java中顺式和链式_Java单链表顺序和链式实现(数据结构五)
  10. 约翰诺曼超级计算机研究中心,第433章 拉泽尔松教授的决定