文章目录

  • 简介
  • 文件和路径
  • 文件中的不同路径
  • 构建不同的Path
  • 总结

简介

文件和路径有什么关系?文件和路径又隐藏了什么秘密?在文件系统的管理下,创建路径的方式又有哪些?今天F师兄带小师妹再给大家来一场精彩的表演。

文件和路径

小师妹:F师兄我有一个问题,java中的文件File是一个类可以理解,因为文件里面包含了很多其他的信息,但是路径Path为什么也要单独一个类出来?只用一个String表示不是更简单?

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多内容请访问www.flydean.com

万物皆有因,没有无缘无故的爱,也没有无缘无故的恨。一切真的是妙不可言啊。

我们来看下File和path的定义:

public class Fileimplements Serializable, Comparable<File>
public interface Pathextends Comparable<Path>, Iterable<Path>, Watchable

首先,File是一个类,它表示的是所有的文件系统都拥有的属性和功能,不管你是windows还是linux,他们中的File对象都应该是一样的。

File中包含了Path,小师妹你且看,Path是一个interface,为什么是一个interface呢?因为Path根据不同的情况可以分为JrtPath,UnixPath和ZipPath。三个Path所对应的FileSystem我们在上一篇文章中已经讨论过了。所以Path的实现是不同的,但是包含Path的File是相同的。

小师妹:F师兄,这个怎么这么拗口,给我来一个直白通俗的解释吧。

既然这样,且听我解释:爱国版的,或许我们属于不同的民族,但是我们都是中国人。通俗版的,大家都是文化人儿,为啥就你这么拽。文化版的,同九年,汝何秀?

再看两者的实现接口,File实现了Serializable表示可以被序列化,实现了Comparable,表示可以被排序。

Path继承Comparable,表示可以被排序。继承Iterable表示可以被遍历,可以被遍历是因为Path可以表示目录。继承Watchable,表示可以被注册到WatchService中,进行监控。

文件中的不同路径

小师妹:F师兄,File中有好几个关于Path的get方法,能讲一下他们的不同之处吗?

直接上代码:

public void getFilePath() throws IOException {File file= new File("../../www.flydean.com.txt");log.info("name is : {}",file.getName());log.info("path is : {}",file.getPath());log.info("absolutePath is : {}",file.getAbsolutePath());log.info("canonicalPath is : {}",file.getCanonicalPath());}

File中有三个跟Path有关的方法,分别是getPath,getAbsolutePath和getCanonicalPath。

getPath返回的结果就是new File的时候传入的路径,输入什么返回什么。

getAbsolutePath返回的是绝对路径,就是在getPath前面加上了当前的路径。

getCanonicalPath返回的是精简后的AbsolutePath,就是去掉了.或者…之类的指代符号。

看下输出结果:

 INFO com.flydean.FilePathUsage - name is : www.flydean.com.txtINFO com.flydean.FilePathUsage - path is : ../../www.flydean.com.txtINFO com.flydean.FilePathUsage - absolutePath is : /Users/flydean/learn-java-io-nio/file-path/../../www.flydean.com.txtINFO com.flydean.FilePathUsage - canonicalPath is : /Users/flydean/www.flydean.com.txt

构建不同的Path

小师妹:F师兄,我记得路径有相对路径,绝对路径等,是不是也有相应的创建Path的方法呢?

当然有的,先看下绝对路径的创建:

public void getAbsolutePath(){Path absolutePath = Paths.get("/data/flydean/learn-java-io-nio/file-path", "src/resource","www.flydean.com.txt");log.info("absolutePath {}",absolutePath );}

我们可以使用Paths.get方法传入绝对路径的地址来构建绝对路径。

同样使用Paths.get方法,传入非绝对路径可以构建相对路径。

public void getRelativePath(){Path RelativePath = Paths.get("src", "resource","www.flydean.com.txt");log.info("absolutePath {}",RelativePath.toAbsolutePath() );}

我们还可以从URI中构建Path:

public void getPathfromURI(){URI uri = URI.create("file:///data/flydean/learn-java-io-nio/file-path/src/resource/www.flydean.com.txt");log.info("schema {}",uri.getScheme());log.info("default provider absolutePath {}",FileSystems.getDefault().provider().getPath(uri).toAbsolutePath().toString());}

也可以从FileSystem构建Path:

public void getPathWithFileSystem(){Path path1 = FileSystems.getDefault().getPath(System.getProperty("user.home"), "flydean", "flydean.txt");log.info(path1.toAbsolutePath().toString());Path path2 = FileSystems.getDefault().getPath("/Users", "flydean", "flydean.txt");log.info(path2.toAbsolutePath().toString());}

总结

好多好多Path的创建方法,总有一款适合你。快来挑选吧。

本文的例子https://github.com/ddean2009/learn-java-io-nio

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/java-io-file-path/

本文来源:flydean的博客

欢迎关注我的公众号:程序那些事,更多精彩等着您!

小师妹学JavaIO之:文件File和路径Path相关推荐

  1. java文件夹路径的表达_小师妹学JavaIO之:文件File和路径Path

    简介 文件和路径有什么关系?文件和路径又隐藏了什么秘密?在文件系统的管理下,创建路径的方式又有哪些?今天F师兄带小师妹再给大家来一场精彩的表演. 文件和路径 小师妹:F师兄我有一个问题,java中的文 ...

  2. 小师妹学JavaIO之:文件系统和WatchService

    文章目录 简介 监控的痛点 WatchService和文件系统 WatchSerice的使用和实现本质 总结 简介 小师妹这次遇到了监控文件变化的问题,F师兄给小师妹介绍了JDK7 nio中引入的Wa ...

  3. 小师妹学JavaIO之:文件写入那些事

    文章目录 简介 字符输出和字节输出 格式化输出 输出其他对象 在特定的位置写入 给文件加锁 总结 简介 小师妹又对F师兄提了一大堆奇奇怪怪的需求,要格式化输出,要特定的编码输出,要自己定位输出,什么? ...

  4. 小师妹学JavaIO之:文件编码和字符集Unicode

    文章目录 简介 使用Properties读取文件 乱码初现 字符集和文件编码 解决Properties中的乱码 真.终极解决办法 总结 简介 小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现 ...

  5. 小师妹学JavaIO之:文件读取那些事

    文章目录 简介 字符和字节 按字符读取的方式 按字节读取的方式 寻找出错的行数 总结 简介 小师妹最新对java IO中的reader和stream产生了一点点困惑,不知道到底该用哪一个才对,怎么读取 ...

  6. .dat文件写入byte类型数组_小师妹学JavaIO之:文件写入那些事

    简介 小师妹又对F师兄提了一大堆奇奇怪怪的需求,要格式化输出,要特定的编码输出,要自己定位输出,什么?还要阅后即焚?大家看F师兄怎么一一接招吧. 字符输出和字节输出 小师妹:F师兄,上次你的IO讲到了 ...

  7. 小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下

    文章目录 简介 虚拟地址空间 详解MappedByteBuffer MapMode MappedByteBuffer的最大值 MappedByteBuffer的使用 MappedByteBuffer要 ...

  8. mappedbytebuffer_小师妹学JavaIO之:MappedByteBuffer多大的文件我都装得下

    简介 大大大,我要大!小师妹要读取的文件越来越大,该怎么帮帮她,让程序在性能和速度上面得到平衡呢?快来跟F师兄一起看看吧. 虚拟地址空间 小师妹:F师兄,你有没有发现,最近硬盘的价格真的是好便宜好便宜 ...

  9. 小师妹学JavaIO之:File copy和File filter

    文章目录 简介 使用java拷贝文件 使用File filter 总结 简介 一个linux命令的事情,小师妹非要让我教她怎么用java来实现,哎,摊上个这么杠精的小师妹,我也是深感无力,做一个师兄真 ...

最新文章

  1. SpringBoot 框架中 使用Spring Aop 、创建注解、创建枚举类 使用过程记录
  2. ORA-01031: insufficient privileges的解决方法
  3. Windows自动关闭程序
  4. LeetCode上稀缺的四道shell编程题解析
  5. junit与testng 分别和mockito 结合使用例子
  6. linq判断集合中相同元素个数_JavaSe集合的概念以及集合框架介绍
  7. 织梦数据库支持mysql5.7_最新织梦DEDECMS5.7数据库说明文档
  8. text html mime img,使用Python的email.mime.multipart发送HTML邮件时命...
  9. 自学转行成前端工程师,三面拿下字节跳动offer
  10. 整理一年中使用到的工具和类库,可能正有你需要的!
  11. 霍尼韦尔从纽交所转板至纳斯达克上市;全球电竞赛事WSL发布首项赛事计划 | 美通企业日报...
  12. 能当「公务员」、服务员,商用服务机器人今年为啥这么火?
  13. Microsoft Visio 2010 - 直线连接线
  14. 文字闪图怎么做?如何制作gif闪图?
  15. 一位营销总监的辞职信(非常经典)
  16. python画国际象棋_python使用turtle绘制国际象棋棋盘
  17. OpenCV 形态学操作应用——提取水平与垂直线
  18. 密码加盐(salt)
  19. 电磁离合器线圈绕线机
  20. 深度学习论文精读05——用于乳腺癌组织病理学图像分类的深度特征

热门文章

  1. Keras-数据准备
  2. java泛型 例子_关于 Java 泛型的一些有趣的例子
  3. python支持的编程范式有_【Python学习手册】chapter1 前面
  4. mod4最优路径问题
  5. 不平等博弈问题学习记录(一)(超实数篇)
  6. QT学习笔记(1)----- QT简介
  7. 一个DDOS病毒的分析(二)
  8. 如何使用Appverifier ?
  9. C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr
  10. 深入理解分布式消息队列