文章目录

  • 简介
  • 文件和路径
  • 文件中的不同路径
  • 构建不同的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. 浅谈常用的Web安全技术手段
  2. RTP协议之Header结构解析
  3. Liverpool一日游
  4. [SQL]批量修改存储过程视图
  5. 流行的编程语言及其趋势
  6. you have mixed tabs and spaces fix this
  7. 《Photoshop混合模式深度剖析》目录—导读
  8. pip3 安装pycrypto 时报错
  9. qt creator php扩展,用qt creator搭建开发、调试php扩展的环境
  10. 服务器系统bios,服务器bios下查看系统配置
  11. redhat7 linux修改语言,RedHatLinux7.1中语言化完全攻略(二)
  12. 史上最全面实用的工业相机选型,相机速率计算,相机靶面,相机接口,图像格式等参数详解与分析
  13. 阳历转阴历,阳历转中国农历
  14. ATECC508A芯片开发笔记(一):初识加密芯片
  15. OCR:通用数码管图像识别训练和使用
  16. win10打开蓝牙_Win10系统中蓝牙鼠标可以配对却无法使用应该如何解决?
  17. 利用字典实现大侠个人信息查询程序
  18. mysql取多字段各自合计_sql实现多字段求和并查询
  19. 在10亿像素图像中发现预后模式 FINDING PROGNOSTIC PATTERNS IN GIGAPIXEL IMAGES
  20. 电商千万用户 mysql设计_Mysql电商设计用户模块 一

热门文章

  1. qpython怎么添加pip_Q: 在Windows上安装Python 2.7的pyHook和pip
  2. 1066. 图像过滤(15)
  3. 绕过360安全卫士的部分代码
  4. 恢复SQLSERVER被误删除的数据
  5. frida hook java层常用模板
  6. 第45讲:哪都能存,Item Pipeline 的用法
  7. Python UDP聊天器
  8. 经典算法刷题笔记pdf
  9. 李松南:智能全真时代的多媒体技术——关于8K、沉浸式和人工智能的思考
  10. 【线上分享】海外超低延时链路设计的挑战与优化实践