首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >10年程序员都不一定搞清楚的文件路径

10年程序员都不一定搞清楚的文件路径

作者头像
技术小黑屋
发布于 2021-02-04 08:05:13
发布于 2021-02-04 08:05:13
94900
代码可运行
举报
文章被收录于专栏:技术小黑屋技术小黑屋
运行总次数:0
代码可运行

Java 中,文件是很常用的概念,这其中文件路径是一个很基础的内容,因为文件的创建,读取,写入和删除等操作都是依赖于文件路径的。但是你仔细看一下Java中 FileAPI 你会发现有这样三个方法返回路径。

  • getPath(获取路径)
  • getAbsolutePath(获取绝对路径)
  • getCanonicalPath(获取规范路径)

了解这其中的差异,我们可以先看一看通用的路径的概念,即相对路径,绝对路径和规范路径。

文件路径中的特殊字符

  • . 用来代表当前的目录
  • .. 用来代表父目录
  • /Linux/Mac等操作系统的路径分隔符
  • \Windows 路径分隔符
  • : 为 Windows磁盘分割符,比如C:

相对路径

  • 相对路径指的是某个文件相对于当前目录的路径

举个例子

有两个文件,路径为

  • 文件 /tmp/a/a.txt
  • 目录 /tmp/b/

那么 * 文件(a.txt)相对当前目录(b)的相对路径就是../a/a.txt

绝对路径

  • 绝对路径指的是从文件系统的根目录到当前文件的路径。
  • 其中Windows的文件系统根目录可以是C:或者D:
  • Linux和Mac 等系统的根目录是/
  • 另外,对于同一个文件,可以存在多个不同的绝对路径。

同一文件的多个绝对路径

假设C盘下有temptemp1两个目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\temp

C:\temp1

那么这些都是指向同一个文件的绝对路径,且都是合法的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\temp\test.txt

C:\temp\test.txt

C:\temp\TEST.TXT

C:\temp\.\test.txt

C:\temp1\..\temp\test.txt

备注: Windows下路径不区分大小写。

Canonical路径 规范路径

  • 规范路径是从文件系统的根目录到当前文件的唯一的路径。
  • 规范路径不像绝对路径那样有多个不同的值指向同一文件。
  • 规范路径是绝对路径,但是绝对路径不一定是规范路径。
  • 规范路径中移除了...等特殊字符

举一个例子

一个相对路径为.././Java.txt的文件,

  • 它的绝对路径是 /Users/androidyue/Documents/projects/PathSamples/.././Java.txt
  • 它的规范路径是 /Users/androidyue/Documents/projects/Java.txt

备注:Canonical kə-ˈnä-ni-kəl 发音类似 可囊尼口

回到 Java File方法中

  • getPath 返回的路径可能是相对路径,也可能是绝对路径。
  • getAbsolutePath 返回的路径是绝对路径
  • getCanonicalPath 返回的路径是唯一的规范路径。

多说无益,上代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.File;



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 folder :");

        displayPath(parent);





        File anotherFile = new File("a.txt");

        System.out.println("Path of another file(a.txt)");

        displayPath(anotherFile);



        File anotherAbsFile = new File("/tmp/a.txt");

        System.out.println("Path of another file(/tmp/a.txt)");

        displayPath(anotherAbsFile);

    }





    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();

        }

    }



}

执行后,输出的日志为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Path of the given file :

path : .././Java.txt

absolute path : /Users/androidyue/Documents/projects/PathSamples/.././Java.txt

canonical path : /Users/androidyue/Documents/projects/Java.txt

Path of the parent folder :

path : ../.

absolute path : /Users/androidyue/Documents/projects/PathSamples/../.

canonical path : /Users/androidyue/Documents/projects

Path of another file(a.txt)

path : a.txt

absolute path : /Users/androidyue/Documents/projects/PathSamples/a.txt

canonical path : /Users/androidyue/Documents/projects/PathSamples/a.txt

Path of another file(/tmp/a.txt)

path : /tmp/a.txt

absolute path : /tmp/a.txt

canonical path : /private/tmp/a.txt



Process finished with exit code 0

References

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
读取 resources 目录下文件路径的九种方式
主要核心方法是使用getResource和getPath方法,这里的getResource("")里面是空字符串
botkenni
2022/08/25
9120
Java获取/resources目录下的资源文件方法
Web项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用;
军军不吃鸡
2022/11/14
1.9K0
Java成神路 —— 文件操作
1.1 File 类概述和构造方法 1. File 类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过 File 封装成对象的 对于 File 而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的 2. File 类的构造方法 方法名 说明 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例 File(String parent, Strin
繁依Fanyi
2023/05/07
1820
File类简介说明加使用
File 类是在整个java.io 包里面唯一一个与文件本身有关的操作类,与文件本身有关指的是这个类可以进行操作文件的路径的指派,可以创建或者删除文件,以及获取文件的相关的信息内容。 在使用File类时可以采用如下的构造方法进行定义实例化:
用户9006224
2022/12/21
2880
File类简介说明加使用
【JavaEE初阶】文件-IO之实现文件系统的操作如何进行实现
我们知道文件一般存储在硬盘(即磁盘上),但是在计算机中,这里的硬盘不完全等于磁盘,磁盘这里有磁带,而磁盘是外存储的一种,我们的硬盘即软盘(机械硬盘)是一种依靠磁性为介质来进行存储数据的;后来2017年这里有更新的(ssd)即固态硬盘,这里的数据的读取就快了很多倍(这里是依靠集成电路)来进行实现的;
用户11288949
2024/10/14
1220
【JavaEE初阶】文件-IO之实现文件系统的操作如何进行实现
【愚公系列】2022年01月 Java教学课程 52-File文件操作
如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象
愚公搬代码
2022/01/15
1580
【愚公系列】2022年01月 Java教学课程 52-File文件操作
九种方式,教你读取 resources 目录下的文件路径
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
2K0
九种方式,教你读取 resources 目录下的文件路径
java 文件操作对象 IO流
{/tabs-pane} {tabs-pane label="printlnfiles方法"}
await
2021/09/09
6030
(59) 文件和目录操作 / 计算机程序的思维逻辑
前面两节我们介绍了如何通过流的方式读写文件内容,本节我们介绍文件元数据和目录的一些操作。 文件和目录操作最终是与操作系统和文件系统相关的,不同系统的实现是不一样的,但Java中的java.io.File类提供了统一的接口,底层它会通过本地方法调用操作系统和文件系统的具体实现,本节,我们就来介绍File类。 File类中的操作大概可以分为三类: 文件元数据 文件操作 目录操作 在介绍这些操作之前,我们先来看下File的构造方法。 构造方法 File既可以表示文件,也可以表示目录,它的主要构造方法有: pu
swiftma
2018/01/31
8950
【文件IO】文件系统操作
Java 中,提供了一个 File 类,进行文件系统操作,这个对象会使用“路径”进行初始化,从而表示一个具体的文件(这个文件可以存在,也可以不存在) 再基于这个对象进行后续操作
椰椰椰耶
2024/10/15
1650
【文件IO】文件系统操作
Java基础 - 常用路径操作总结
1. 获取类路径 返回类路径内容,一般为:lib1.jar;lib2.jar。 System.getProperty("java.class.path");  在命令行运行Java程序时,上面的代码将会返回"-cp"参数内容,例如,执行下面的命令返回".;test.jar": java -cp .;test.jar Test 2. Jar文件中路径操作 2.1 获取当前代码所在Jar包的绝对路径 File f = new File(Test.class.getProtectionD
joymufeng
2018/05/17
6820
File 类详解
1、路径分隔符 ; 2、名称分隔符 / (windows) \ (linux 等)
帅飞
2019/01/22
7240
关于File类概念及方法的一些介绍
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 Java把电脑中的文件和文件夹(目录)封装为一个File类,我们可以使用File类对文件和文件夹进行操作。
全栈程序员站长
2022/09/06
3330
关于File类概念及方法的一些介绍
文件操作与文件夹操作
1.文件操作 package TestFile;/* * zt * 2020/8/6 * 16:47 * 文件操作 1.创建文件 2.删除文件 3.获取信息 4.判断 5.修改名字 */ import java.io.File; import java.io.IOException; import java.sql.Date; public class FileOperate { public s
2020/10/23
1.1K0
【javaEE】文件操作--io
E:\cs2\5EClient 中的 \ 就是 pathSeparator,如果当前的系统是 Windows,\ 或者 / 都可以作为分隔符,如果系统是 Linux 或 Mac ,只能使用 / 作为分隔符,一般我们都建议使用 / 作为分隔符,因为 \ 一般还需要搭配转义字符来使用,而且因为linux也是/,如果在windows中用/可以直接跨系统。
E绵绵
2025/03/14
1070
【javaEE】文件操作--io
常用方法(文件名操作)
获取文件信息 方法名称 方法作用 getName() 文件名称 getPath() 赋值路径(绝对\相对) getAbsolutePath() 绝对路径 getParent() 绝对路径,如果是相对路径返回null 获取构建信息 方法名称 方法作用 exists() 存在 canRead() 可读 canWrite() 可写 isFile() 文件,不存在、文件夹均为false isDirectory() 文件夹,不存在、文件均为false 获取文件长度(字节数) 方法名称 方法作用 length()
shimeath
2020/07/30
4080
Java 文件操作demo
以下实例演示了使用 readLine() 方法来读取文件 test.log 内容,其中 test.log 文件内容为:
默 语
2024/11/20
1260
Java 文件操作demo
java 文件操作
Single
2018/01/04
1.3K0
Java中文件路径及其访问
1. URI形式的绝对资源路径:例如:file:/E:/EclipseWorkSpace/JavaTest/bin/images/me.jpg。URL是URI的特例,URL的前缀必须是Java认识的。URL可以打开资源而URI不行。URL和URI可以通过各自的toURI()和toURL()方法进行转换。
卡尔曼和玻尔兹曼谁曼
2019/01/25
4.5K0
[二] JavaIO之File详解 以及FileSystem WinNTFileSystem简介
1.可选的与系统有关的前缀  字符串   比如盘符,"/" 表示 UNIX 中的根目录,"\\\\" 表示 Microsoft Windows UNC 路径名
noteless
2018/09/11
2.6K0
[二] JavaIO之File详解  以及FileSystem  WinNTFileSystem简介
相关推荐
读取 resources 目录下文件路径的九种方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档