【java基础】使用Path和Files类,更方便的操作路径和文件

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 【java基础】使用Path和Files类,更方便的操作路径和文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

说明

这篇文章会基于Path和Files这2个类来对文件进行操作,使用起来会比File类方便很多。Files当成工具类用就行了。


Path介绍

Path是一个接口,里面定义了许多操作路径的便捷方法。

获取Path是通过Paths类里面的get方法

在这里插入图片描述

        Path path = Paths.get("a", "b", "c.txt");

这个方法会将我们传入的字符串通过路径分隔符连接起来,上面的path连接后的内容如下

a\b\c.txt

Path里面的方法大家根据需要进行使用即可,都很简单。基本包含了所有对路径的操作

在这里插入图片描述

读写文件

通过Files可以很轻松的进行文件的读写

        Path path = Paths.get("a.txt");
        // 获取文件的全部字节
        byte[] bytes = Files.readAllBytes(path);
        // 按行读取所有内容
        List<String> lines = Files.readAllLines(path);

        // 通过追加方式写入字节数组
        Files.write(path, bytes, StandardOpenOption.APPEND);
        // 将文本行写入文件。每一行都是一个字符序列,并按顺序写入文件,每一行以平台的行分隔符结束
        Files.write(path, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);

对于文件长度较大的文本或者是二进制文件,还是应当使用输入输出流的方式来进行,可以通过Files轻松的创建流

        Path path = Paths.get("a.txt");

        InputStream inputStream = Files.newInputStream(path, StandardOpenOption.APPEND);
        OutputStream outputStream = Files.newOutputStream(path);
        Writer writer = Files.newBufferedWriter(path, StandardOpenOption.APPEND);
        Reader reader = Files.newBufferedReader(path);

我们在进行文件写的时候可以传入一个或多个OpenOption,选项如下
在这里插入图片描述
在这里插入图片描述


创建文件和目录

下面代码用于创建目录

        Path path = Paths.get("a/b/c");

        // 只能创建最后一级目录,也就是除了最后一个文件夹外,其他文件夹都要存在
        Path directory = Files.createDirectory(path);
        // 创建多级目录
        Path directories = Files.createDirectories(path);

下面代码用于创建文件

        Path path = Paths.get("b.txt");

        // 创建文件,如果存在就抛出异常
        Path file = Files.createFile(path);

复制、移动和删除文件

复制文件

        Path path1 = Paths.get("a.txt");
        Path path2 = Paths.get("b.txt");

        // 将a.txt复制到path2所在的目录下,新文件名称为b.txt
        Path copy = Files.copy(path1, path2);

移动文件

        Path path1 = Paths.get("a.txt");
        Path path2 = Paths.get("move_a.txt");

        // 将a.txt移动到path2所在的目录下,新文件名称为move_a.txt
        Path move = Files.move(path1, path2);

删除文件

        Path path = Paths.get("a.txt");
        
        // 删除文件,不存在抛出异常
        Files.delete(path);
        // 如果存在该文件就删除
        Files.deleteIfExists(path);

对于复制和移动方法,我们还可以传入一个或多个CopyOption,就是表示我们以何种方式来操作文件。下面给出了CopyOption的选项和解释
在这里插入图片描述
方便表示替换一个存在的文件,将属性复制到新文件,文件操作是原子性的。


获取文件信息

下面的静态方法都将返回一个boolean值,表示检查路径的某个属性的结果:

  • exists
  • isHidden
  • isReadable,isWritable,isExecutable
  • isRegularFile,isDirectory,isSymbolicLink

size方法将返回文件的字节数:

	long fileSize = Files.size(path);

getOwner方法将文件的拥有者作为java.nio.file,attribute,UserPrincipal的一个实例返回。所有的文件系统都会报告一个基本属性集,它们被封装在BasicFileAttributes接口中,这些属性与上述信息有部分重叠。基本文件属性包括:

  • 创建文件、最后一次访问以及最后一次修改文件的时间,这些时间都表示成java.nio.file.attribute.FileTime。
  • 文件是常规文件、目录还是符号链接,抑或这三者都不是。
  • 文件尺寸。
  • 文件主键,这是某种类的对象,具体所属类与文件系统相关,有可能是文件的唯一标
    识符,也可能不是。

获取这些属性可以通过下列调用

        Path path = Paths.get("a.txt");

        BasicFileAttributes basicFileAttributes = Files.readAttributes(path, BasicFileAttributes.class);
        // 如果文件相同兼容POSIX,可以获取PosixFileAttributes实例
        PosixFileAttributes posixFileAttributes = Files.readAttributes(path, PosixFileAttributes.class);

BasicFileAttributes 支持的方法如下

在这里插入图片描述

PosixFileAttributes支持的方法如下

在这里插入图片描述

我们在获取属性的时候还可以传入LinkOption选项,该选项的内容如下

在这里插入图片描述


访问目录中的项

现在有以下的目录结构

在这里插入图片描述
使用Files.list可以访问第一层子目录

        Path path = Paths.get("a/");

        try (Stream<Path> pathStream = Files.list(path)) {
            pathStream.forEach(System.out::println);
        }

输出为

a\b
a\b1

如果想要访问所有子目录,使用Files.walk

        Path path = Paths.get("a/");

        try (Stream<Path> pathStream = Files.walk(path)) {
            pathStream.forEach(System.out::println);
        }

输出如下

a
a\b
a\b\c
a\b1
a\b1\c1

可以发现访问方式是dfs,也就是深搜。

在walk函数中还可以传入FileVisitOption,选项内容如下

在这里插入图片描述


总结

Files里面方便的方法还有很多,这里只说明了几个常用的方法,感兴趣可以直接再去看一下官网文档。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140176.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!