欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java NIO.2 Files类的常用方法

程序员文章站 2022-07-02 17:59:01
Files类是一个工具类,提供了大量的静态方法来操作文件、文件夹。 Files类常用方法: long size(Path path) //返回文件大小 boolean isDirectory(Path path) //是否是文件夹 boolean isExecutable(Path path) // ......

 

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)    //存在才删除,不存在时不会报错。

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

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

 

 

 

查看某个盘的大小:

1      path path=paths.get("d;\\");
2         filestore store=files.getfilestore(path);
3         system.out.println(store.gettotalspace());   //总大小。字节数
4         system.out.println(store.getusablespace());  //可用大小

 

 

 

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

 1     //只能是文件夹
 2         path path=paths.get("d:\\二次元");
 3         //列出该文件夹下所有子文件、子文件夹的路径。
 4         files.list(path).foreach(pathitem -> system.out.println(pathitem));   //pathitem代表一个子文件/文件夹的path对象
 5         
 6         /*
 7         d:\二次元\a.png
 8         d:\二次元\c.png
 9         d:\二次元\q.png
10         d:\二次元\test
11          */

 

 

 

读取文本文件的所有行:

1     //只能是文本文件
2         path path=paths.get("d:\\二次元\\1.txt");
3         //读取所有的行,逐行输出
4         files.lines(path).foreach(line->system.out.println(line));  //line代表一行
5         //可指定解码字符集。只能是charset对象,不能是string。
6         // 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。