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

同理,删除有内容的目录时,可以重写 visitFile() 方法,并在里面执行删除文件操作,重写 postVisitDirectory() 方法,并在里面执行删除目录操作即可。

Files 类中的其他方法

Files 类包含许多其他有用的函数,例如用于创建符号链接,确定文件大小,设置文件权限等的函数。有关java.nio.file.Files 类的详细信息,请查看 JavaDoc

管道 Pipe

Pipe 是两个线程之间的单向数据连接。管道有 source 通道和一个 sink 通道,将数据写入 sink 通道,就可以从 source 通道读取该数据。
以下是管道原理的说明:

image

使用管道进行读取数据

先看一个完整的例子:

public class PipeExample { public static void main(String[] args) throws IOException { Pipe pipe = Pipe.open(); Pipe.SinkChannel sinkChannel = pipe.sink(); // sink 通道写入数据 String data = "some string"; ByteBuffer buffer = ByteBuffer.allocate(32); buffer.clear(); buffer.put(data.getBytes()); buffer.flip(); // 反转缓冲区,准备被读取 while (buffer.hasRemaining()) { sinkChannel.write(buffer); // 将 Buffer 的数据写入 sink 通道 } Pipe.SourceChannel sourceChannel = pipe.source(); // 源通道读取数据 ByteBuffer readBuffer = ByteBuffer.allocate(32); int bytesRead = sourceChannel.read(readBuffer); // 返回值代表读取了多少数据 System.out.println("Read: " + bytesRead); // Read: 11 System.out.println(new String(readBuffer.array())); // some string } }

如上代码,首先要创建管道,打开管道之后是使用同一个管道对象获取对应的 sink 通道和 source 通道的,这会自动地将两个通道连接起来,作为对比,在标准 IO 管道中是分别创建读管道和写管道,然后在构造器中或者使用pipe1.connect(pipe2) 方法来连接起来,如下:

PipedOutputStream output = new PipedOutputStream(); PipedInputStream input = new PipedInputStream(); input.connect(output); // 或者使用如下1行代码,可以代替上面2行代码来连接2个管道 //PipedInputStream input = new PipedInputStream(output);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszwj.html