联博以太坊_Java 中几种获取文件路径的方式
发表时间:2021-01-04 浏览量:94
Java 中几种获取文件路径的方式
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 组织函数的路径名。
,,www.9cx.net采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。
因此,若是 File
对象是使用相对路径建立的,则返回的值也将是相对路径。若是是绝对路径就返回绝对路径。
File file = new File("./app.yml");
# 输出 path = ./app.yml
System.out.println("path = " + file.getPath());
# 若是为绝对路径
File file = new File("/Users/dax/IdeaProjects/foo/src/app.yml");
# 输出 path = path = /Users/dax/IdeaProjects/foo/src/app.yml
System.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()
。
规范路径(不包罗速记符)对于一个牢固位置的文件来说是唯一的。
0
珍藏