Files类是一个工具类,提供了大量的静态方法来操作文件、文件夹。

Files类常用方法:

  • long size(Path  path)    //返回文件大小
  • boolean  isDirectory(Path  path)    //是否是文件夹
  • boolean  isExecutable(Path  path)    //是否是可执行文件
  • boolean  isHidden(Path  path)    //是否是隐藏的
  • boolean  exists(Path  path)   //该文件/文件夹是否存在
  • boolean  notExists(Path  path)   //是否不存在
  • boolean  isReadable(Path  path)    //是否可读
  • boolean  isWritable(Path  path)    //是否可写
  • createFile(Path  filePath)   //创建文件,只能是文件,不能是文件夹。如果已存在同名文件,会报错。
  • createDirectory(Path  dirPath)    //创建文件夹。如果已存在同名文件夹,会报错
  • createTempFile(String prefix, String suffix)    //在OS的临时文件夹中创建一个临时文件
  • createTempFile(Path  dir, String prefix, String suffix)    //在指定的目录下创建一个临时文件

   prefix是文件名前缀,suffix是文件名后缀,一般是扩展名,比如“.zip”。中间会使用系统生成的一个随机数。返回该临时文件的Path对象(绝对路径)。

  • createTempDirectory(String prefix)    //在OS的临时文件夹中创建一个临时文件夹。
  • createTempDirectory(Path  dir, String prefix)    //在指定的目录下创建一个临时文件夹

  文件夹名:前缀+一个系统生成的随机数

  • Files.copy(Path src, Path  target)    //复制文件,如果存在同名的目标文件,会报错。
  • Files.copy(Path  src, Path  target , StandardCopyOption.REPLACE_EXISTING)   //如果存在同名的目标文件,会替换

  只能是文件,不能是文件夹,要复制文件夹需要递归复制子文件、子文件夹。目标文件名可与原文件名不同。

  • Files.move(Path  src, Path  target)    //剪切,如果目标已存在,会报错
  • Files.move(Path  src, Path  target , StandardCopyOption.REPLACE_EXISTING)    //如果目标已存在,会替换。虽然是move,但常量还是是StandardCopyOption.REPLACE_EXISTING。

  可以是文件、文件夹。

  在copy()、move()操作中:如果Path的中间部分路径有不存在的,会报错,并不会自动创建。比如复制一张图片,目标是"D:\\test\\1.png" ,如果test不存在,会报错。

  剪切是一种特殊的复制,先复制,复制完成后再删除原文件/文件夹。

  • Files.delete(Path  path)  //删除文件、空目录。如果不存在,会报错
  • Files.deleteIfExists(Path path)    //存在才删除,不存在时不会报错。

  只能删除文件、空目录。如果该文件夹下包含子文件、子目录,即便子目录是空的,也会报错。

  要删除有内容的文件夹,需要递归删除子文件、子文件夹。

查看某个盘的大小:

      Path path=Paths.get("D;\\");
FileStore store=Files.getFileStore(path);
System.out.println(store.getTotalSpace()); //总大小。字节数
System.out.println(store.getUsableSpace()); //可用大小

获取某个文件夹下所有子文件、子文件夹的路径:

     //只能是文件夹
Path path=Paths.get("D:\\二次元");
//列出该文件夹下所有子文件、子文件夹的路径。
Files.list(path).forEach(pathItem -> System.out.println(pathItem)); //pathItem代表一个子文件/文件夹的Path对象 /*
D:\二次元\a.png
D:\二次元\c.png
D:\二次元\q.png
D:\二次元\test
*/

读取文本文件的所有行:

     //只能是文本文件
Path path=Paths.get("D:\\二次元\\1.txt");
//读取所有的行,逐行输出
Files.lines(path).forEach(line->System.out.println(line)); //line代表一行
//可指定解码字符集。只能是Charset对象,不能是String。
// Files.lines(path,Charset.forName("GBK")).forEach(line->System.out.println(line));

读取文件内容:

  • String  Files.readString(Path path)    //读取所有文本,以String形式返回。会读取换行符。只能是文本文件
  • String  Files.readString(Path path, Charset  charset)    //可指定解码字符集
  • List<String>  Files.readAllLines(Path  path)   //读取所有的行,以LIst<String>形式返回,一行就是一个String类型的元素。只能是文本文件
  • List<String>  Files.readAllLines(Path  path, Charset  charset)    //可指定解码字符集
  • byte[]  Files.readAllBytes(Path  path)    //读取文件所有数据,以字节数组形式返回。文件可以是任意类型。

写入文件:

  • Files.write(Path  path, byte[]  bytes)    //写入一个byte[]
  • Files.writeString(Path  path, CharSequence  cs)    //写入一个字符序列,可以是String、StringBuffer、StringBuilder、Char[]
  • Files.writeString(Path  path, CharSequence  cs, Charset  charset)    //指定编码字符集

以上3个方法均可在末尾指定参数个数可变的的可选参数OpenOption,常用的值:

  • StandardOpenOption.APPEND    追加
  • StandardOpenOption.READ    读
  • StandardOpenOption.WRITE   写
  • StandardOpenOption.SYNC   同步写到磁盘文件
  • StandardOpenOption.DELETE_ON_CLOSE   关闭时删除文件

参数个数可变,可同时使用多个预定义的值,放在参数表最后面,以逗号分隔。

创建对象:

  • Files.newBufferedReader(Path path);
  • Files.newBufferedReader(Path path,Charset charset); //可指定解码字符集
  • Files.newBufferedWriter(Path path);
  • Files.newBufferedWriter(Path path, Charset charset); //可指定编码字符集
  以上2个方法均可指定参数个数可变的OpenOption。
  • Files.newInputStream(Path path);
  • Files.newOutputStream(Path path);
  以上2个方法均可指定参数个数可变的OpenOption。

Java NIO.2 Files类的常用方法的更多相关文章

  1. java.util.concurrent.Executors类的常用方法介绍

    Java 线程池 Executors提供了几种线程池实现? 5个,分别如下 1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...

  2. Java NIO之Charset类字符编码对象

    介绍 java中使用Charset来表示编码对象 This class defines methods for creating decoders and encoders and for retri ...

  3. 转载Java NIO中的Files类的使用

    Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法. Files.exists() Files.exits()方法用来检查给定的Path在文件 ...

  4. Java NIO之拥抱Path和Files

    Java面试通关手册(Java学习指南)github地址(欢迎star和pull):https://github.com/Snailclimb/Java_Guide 历史回顾: Java NIO 概览 ...

  5. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  6. Java NIO学习系列七:Path、Files、AsynchronousFileChannel

    相对于标准Java IO中通过File来指向文件和目录,Java NIO中提供了更丰富的类来支持对文件和目录的操作,不仅仅支持更多操作,还支持诸如异步读写等特性,本文我们就来学习一些Java NIO提 ...

  7. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

  8. Java7 新特性 —— java.nio.file 文件操作

    本文部分摘自 On Java 8 自 Java7 开始,Java 终于简化了文件读写的基本操作,新增了 java.nio.file 库,通过与 Java8 新增的 stream 结合可以使得文件操作变 ...

  9. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

随机推荐

  1. Android 获取当前应用的版本号+版本号比较

       前言:因为项目更新的时候需要一些版本号的信息,后台返回两个string,一个是最低兼容版,一个是最新版.所以拿到数据后要比较一下,所以封装了一个Common包来处理. Step 1 废话不多说, ...

  2. mybatis是如何防止sql注入?

    sql注入发生的时间,sql注入发生的阶段在sql预编译阶段,当编译完成的sql不会产生sql注入 采用jdbc操作数据时候 String sql = "update ft_proposal ...

  3. SetUnhandledExceptionFilter

    SetUnhandledExceptionFilter 设置未捕获异常处理 通常windows程序长时间运行,会发生各种问题,例如访问异常,内存溢出,堆栈破坏等. 这时候通常希望程序自己能增加处理,而 ...

  4. VMware workstation 9.0中安装Windows server 2012 和 Hyper-v

    一.准备工作 首先下载和安装和安装VMware workstation 9.0 下载Windows server 2012 iso镜像文件 二.安装Windows server 2012虚拟机 1.新 ...

  5. IOS开发---菜鸟学习之路--(七)-自定义UITableViewCell

    本篇将介绍如何自定义 UITableViewCell 首先选择新建文件 可以直接使用快捷键 COMMAND+n打开新建页面,然后选Objective-C class 然后选择继承之UITableVie ...

  6. leetcode 【 Set Matrix Zeroes 】python 实现

    题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cl ...

  7. sql语句查询数据库案例

    package com.hanqi.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  8. 如何使用 JSX 构建 Gutenberg 块

    本教程将介绍使用 JSX 构建自定义块所需的步骤. 由于浏览器不支持 JSX 和 ES6,因此我们需要将代码编译后才能在浏览器中运行. 我们不需要手动编译代码,因为有些工具可以为我们自动执行此过程. ...

  9. Leetcode 488.祖玛游戏

    祖玛游戏 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色(R),黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一串球中 ...

  10. [oldboy-django][2深入django]Form总结

    1 form总结 # Form数据格式验证 - 原理: - 流程 a.写类LoginForm(Form): 字段名 = fields.xxFields() # 验证规则,本质是正则表达式(fields ...