小师妹学JavaIO之:文件File和路径Path

简介: 小师妹学JavaIO之:文件File和路径Path

简介



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


文件和路径



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


更多精彩内容且看:



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


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


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


public class File
   implements Serializable, Comparable<File>


public interface Path
    extends 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.txt
 INFO com.flydean.FilePathUsage - path is : ../../www.flydean.com.txt
 INFO com.flydean.FilePathUsage - absolutePath is : /Users/flydean/learn-java-io-nio/file-path/../../www.flydean.com.txt
 INFO 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());
        }
相关文章
|
3月前
|
Java
File类的基本使用【 File类+IO流知识回顾①】
这篇文章回顾了Java中File类的基本使用,包括创建File对象、获取文件数据信息、判断文件存在与否、创建和删除文件目录,以及遍历文件目录的方法。
File类的基本使用【 File类+IO流知识回顾①】
|
7月前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
201 2
|
7月前
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
386 2
|
存储 XML JSON
【JavaSE专栏71】File类文件读写,对计算机中的文件进行读取和写入操作
【JavaSE专栏71】File类文件读写,对计算机中的文件进行读取和写入操作
探索 Java 中的 File 类:文件与目录操作的全方位指南
在 Java 编程中,文件和目录操作是基本任务之一,而 `File` 类正是帮助我们实现这些任务的重要工具。无论是创建、读取、写入文件,还是管理目录,`File` 类都是不可或缺的。本文将带您深入探索 Java 中的 `File` 类,揭示其功能、用法以及在实际开发中的应用场景。
|
存储 移动开发 Java
【JavaSE】Java基础语法(三十六):File & IO流
1. File java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。
java202303java学习笔记第三十六天综合练习(拷贝文件夹)1
java202303java学习笔记第三十六天综合练习(拷贝文件夹)1
41 0
java202303java学习笔记第三十六天综合练习(拷贝文件夹)2
java202303java学习笔记第三十六天综合练习(拷贝文件夹)2
58 0
|
Java Unix Windows
开心档之 Java 流 (Stream)、文件 (File) 和 IOJava.io
Java 流(Stream)、文件(File)和 IOJava.io,包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标
|
Java Unix
Java开发——27.File类
File类操作文件,或者目录。 能实现对目录或者文件的增删改查...
Java开发——27.File类