java读取file文件路径_Java 中几种获取文件路径的方式

原标题:Java 中几种获取文件路径的方式

1. 前言

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

2. 文件的路径

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

2.1 相对路径

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

2.2 绝对路径

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

2.3 路径速记符

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

标识符

说明

../

表示当前文件所在的目录的上一级目录

./

表示当前文件所在的目录

/

表示根目录

~

当前用户目录, mac下为 /Users/username ,而 win10下为 c:usersusername

Windows下基本将 / 改为 即可。

3. Java 中读取文件

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

foo

|_src

| |_Test.java

| |_app.yml

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

3.1 getPath

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

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

File file = newFile( "./app.yml");

# 输出 path = ./app.yml

System.out.println( "path = "+ file.getPath);

# 如果为绝对路径

File file = newFile( "/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 = newFile( "./app.yml");

# absolutePath = /Users/dax/IdeaProjects/foo/./app.yml

System.out.println( "absolutePath = "+ absolutePath);

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

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

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

File file = newFile( "./app.yml");

# canonicalPath = /Users/dax/IdeaProjects/foo/app.yml

System.out.println( "canonicalPath = "+ file.getCanonicalPath);

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

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

推荐【小马哥 Java 星球】

星主小马哥:

大家好,我是星主小马哥。欢迎加入「小马哥 Java 星球」,希望大家多在星球里沟通,让我们探讨技术,把握趋势,共同进步

深入探讨 Java 相关技术,包括行业动态,架构设计,设计模式,框架使用,源码分析等返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值