您的位置 首页 java

Java中NIO基本介绍(5)——Files、Pipe、Path

1 基本概括

2 主要介绍

2.1 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)    //存在才删除,不存在时不会报错。
  只能删除文件、空目录。如果该文件夹下包含子文件、子目录,即便子目录是空的,也会报错。
  要删除有内容的文件夹,需要递归删除子文件、子文件夹。
  
读取文件内容:
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。  

2.2 Pipe原理

Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。

Pipe和channel的区别

pipe是线程间单向通道。 channel是服务器和客户端双向通道。

3 简单用例

3.1 通过管道传输数据

 @Test
public void test1() throws IOException{
    //1. 获取管道
    Pipe pipe = Pipe.open();

    //2. 将缓冲区中的数据写入到管道
    ByteBuffer buf = ByteBuffer.allocate(1024);
    Pipe.SinkChannel sinkChannel = pipe.sink();
    buf.put("通过单向管道发送数据".getBytes());
    buf.flip();
    sinkChannel.write(buf);

    //3. 读取缓冲区中的数据
    Pipe.SourceChannel sourceChannel = pipe.source();
    buf.flip();
    int len = sourceChannel.read(buf);
    System.out.println(new String(buf.array(),0,len));

    sourceChannel.close();
    sinkChannel.close();
}
  

文章来源:智云一二三科技

文章标题:Java中NIO基本介绍(5)——Files、Pipe、Path

文章地址:https://www.zhihuclub.com/174325.shtml

关于作者: 智云科技

热门文章

网站地图