Java NIO.2(New I/O) API的关键类和功能[简单示例]

Java NIO.2(New I/O)是Java SE 7引入的一组用于处理I/O操作的新API。它在Java标准库中提供了更灵活、高效的文件和文件系统操作方式,相对于传统的Java I/O(java.io)包,Java NIO.2提供了更多的功能和更好的性能。
下面是一些Java NIO.2 API的关键类和功能:
1. java.nio.file.Path - 表示文件或目录的路径,提供了各种操作路径的方法,如获取父路径、解析路径等。
2. java.nio.file.Paths - 提供了创建、转换和解析路径的方法,例如通过字符串创建路径对象。
3. java.nio.file.Files - 提供了许多对文件和目录进行操作的静态方法,如复制、移动、删除、创建目录等。
4. java.nio.file.StandardOpenOption - 定义了文件打开选项,如读取、写入、追加等。
5. java.nio.file.FileVisitor - 定义了对文件树进行遍历的接口,可以自定义访问文件和目录时的行为。
6. java.nio.file.attribute.FileAttributes - 提供了文件和目录属性的方法,如文件大小、创建时间、修改时间等。
7. java.nio.file.WatchService - 提供了监视文件和目录变化的功能,可以监听文件的创建、修改、删除等事件。

通过使用这些类和方法,你可以更方便地进行文件和文件系统的操作,如读写文件、复制文件、遍历文件树、监视文件变化等。

 --------

java.nio.file 包提供了访问文件、文件属性和文件系统的接口和类。它包含了一些核心的类和接口,用于处理文件和目录的操作。
以下是 java.nio.file 包中的一些主要类和接口:
1. Path:表示文件或目录的路径。它提供了许多操作路径的方法,如获取父路径、解析路径等。
2. Paths:提供了创建、转换和解析路径的方法,例如通过字符串创建路径对象。
3. Files:提供了各种对文件和目录进行操作的静态方法,如复制、移动、删除、创建目录等。

4. FileVisitor:定义了对文件树进行遍历的接口,可以自定义访问文件和目录时的行为。
5. WatchService:提供了监视文件和目录变化的功能,可以监听文件的创建、修改、删除等事件。

java.nio.file.attribute 包提供了对文件和文件系统属性的访问的接口和类。
以下是 java.nio.file.attribute 包中的一些主要类和接口:
1. BasicFileAttributes:定义了文件的基本属性,如文件大小、创建时间、修改时间等。
2. FileAttribute:定义了文件属性的接口,可以用于设置文件的某些属性。
3. FileAttributeView:定义了访问文件属性视图的接口,可以获取和修改文件的属性。
4. PosixFilePermission:枚举类型,定义了 POSIX 文件权限。
5. FileOwnerAttributeView:定义了访问文件所有者的接口,可以获取和修改文件的所有者。
通过使用这些类和接口,可以方便地访问和操作文件、文件属性和文件系统。

java.nio.file.StandardOpenOption 是一个枚举类,定义了文件打开选项,用于指定在打开文件时的行为。它包含了多个常量,可以在打开文件时使用其中的一个或多个选项。
以下是 StandardOpenOption 中常用的一些选项:
- READ:以读取方式打开文件。
- WRITE:以写入方式打开文件。
- APPEND:以追加方式打开文件,新数据将追加到文件末尾。
- CREATE:如果文件不存在,则创建新文件。
- CREATE_NEW:创建一个新文件,如果文件已存在则抛出异常。
- TRUNCATE_EXISTING:将现有文件截断为零字节大小。
通过使用这些选项,可以根据需求来打开文件并指定相应的行为。

java.nio.file.FileVisitor 是一个接口,定义了对文件树进行遍历时的行为。它包含了多个方法,可以自定义对文件和目录的访问方式。
以下是 FileVisitor 中的主要方法:
- preVisitDirectory(Path dir, BasicFileAttributes attrs):在访问目录之前调用。
- postVisitDirectory(Path dir, IOException exc):在访问目录之后调用。
- visitFile(Path file, BasicFileAttributes attrs):访问文件时调用。
- visitFileFailed(Path file, IOException exc):访问文件失败时调用。
通过实现 FileVisitor 接口,并重写这些方法,可以实现对文件树进行自定义的遍历和访问操作,例如在访问文件时执行特定的逻辑。

java.nio.file.WatchService 是 Java NIO.2 中提供的一个 API,用于监视文件和目录的变化。它可以监听文件的创建、修改、删除等事件,并在事件发生时触发相应的操作。
以下是 WatchService 的主要方法:
- register(Path dir, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers):注册要监视的目录,并指定要监视的事件类型和修饰符。
    - Path dir:要监视的目录的路径。
    - WatchEvent.Kind<?>[] events:要监视的事件类型数组。可以传递多个事件类型,例如 StandardWatchEventKinds.ENTRY_CREATE、StandardWatchEventKinds.ENTRY_MODIFY、StandardWatchEventKinds.ENTRY_DELETE 等。
    - WatchEvent.Modifier... modifiers:可选的修饰符参数,用于修改监视行为。修饰符可以是以下之一:
      - com.sun.nio.file.SensitivityWatchEventModifier.HIGH:高灵敏度修饰符,对文件系统实现更灵敏的监听。
      - com.sun.nio.file.SensitivityWatchEventModifier.LOW:低灵敏度修饰符,对文件系统实现较低的监听。

- poll():检索下一个可用的 WatchKey,或者如果没有可用的 WatchKey,则立即返回 null。
- take():检索并删除下一个可用的 WatchKey,如果没有可用的 WatchKey,则等待。
- close():关闭此监视服务。
通过调用 register() 方法来注册要监视的目录,并指定要监视的事件类型和修饰符。然后使用 poll() 或 take() 方法检索 WatchKey,以获取有关已发生的事件的信息。最后,使用 close() 方法关闭监视服务。

-------------

  • 使用 Files.walkFileTree() 方法遍历文件树
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;public class NioFilesTraversalExample {public static void main(String[] args) {Path startPath = Paths.get("C:\\Users\\Administrator\\Documents"); // 替换为你有权限访问的目录try {// new SimpleFileVisitor<>() {} 是创建了一个匿名内部类,并且对 SimpleFileVisitor 进行了实现。// 在这个匿名内部类中,我们重写了 visitFile() 和 visitFileFailed() 方法来定义自己的文件访问行为。Files.walkFileTree(startPath, new SimpleFileVisitor<>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {System.out.println(file);return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {if (exc instanceof AccessDeniedException) {System.err.println("Access denied: " + file);return FileVisitResult.SKIP_SUBTREE;} else {throw exc;}}});} catch (IOException e) {e.printStackTrace();}}
}/*
Files.walkFileTree是Java NIO.2 API提供的一个非常方便的方法,可以用于遍历指定路径下的所有文件和子目录。
它接受两个参数:要遍历的起始目录路径和一个FileVisitor对象。在我们的例子中,我们传递了一个匿名内部类,这个类继承了SimpleFileVisitor类,
并实现了其中的两个方法:visitFile和visitFileFailed。visitFile方法会在访问到每一个文件时被调用,它传递了两个参数:当前文件的路径和文件属性。
在这个方法中,我们简单地输出了文件的路径,并返回了CONTINUE,表示继续遍历。visitFileFailed方法会在访问文件失败时被调用,它传递了两个参数:当前文件的路径和导致访问失败的异常。
在这个方法中,我们检查了异常类型是否为AccessDeniedException(访问被拒绝异常),
如果是,则输出错误信息并返回SKIP_SUBTREE,表示跳过子目录。
如果不是,则抛出异常,让程序崩溃并输出错误信息。最后,在try块中,我们调用了Files.walkFileTree方法,并处理了可能出现的IOException异常。通过以上方法,我们可以遍历指定目录下的所有文件和子目录,并且能够处理访问被拒绝的情况。Files.walkFileTree() 方法是 Java NIO 包中的一个功能强大的方法,用于递归地遍历文件树。它可以用来执行各种文件操作,比如复制、移动、删除文件等。
以下是 Files.walkFileTree() 方法的基本用法:
Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)
start:表示要遍历的起始路径。
visitor:表示一个实现了 FileVisitor 接口的对象,用于定义对文件树中每个文件和目录的访问行为。
FileVisitor 接口定义了访问文件树节点时的各种行为,包括访问文件、访问目录、访问失败等。你可以根据需要实现这个接口,并传递给 walkFileTree 方法。使用 Files.walkFileTree() 方法,你可以遍历文件树并对每个文件和目录执行自定义操作,例如打印文件路径、复制文件等。*/

Files.walkFileTree() 方法是 Java NIO 包中的一个功能强大的方法,用于递归地遍历文件树。它可以用来执行各种文件操作,比如复制、移动、删除文件等。
以下是 Files.walkFileTree() 方法的基本用法:
Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)
start:表示要遍历的起始路径。
visitor:表示一个实现了 FileVisitor 接口的对象,用于定义对文件树中每个文件和目录的访问行为。
FileVisitor 接口定义了访问文件树节点时的各种行为,包括访问文件、访问目录、访问失败等。你可以根据需要实现这个接口,并传递给 walkFileTree 方法。

使用 Files.walkFileTree() 方法,你可以遍历文件树并对每个文件和目录执行自定义操作,例如打印文件路径、复制文件等。

-----------------

  • 使用 WatchService 监视文件的创建、修改和删除事件

import java.nio.file.*;public class NioFileWatcherExample {public static void main(String[] args) throws Exception {// 创建 WatchService 对象WatchService watchService = FileSystems.getDefault().newWatchService();// 注册要监视的目录Path directory = Paths.get("C:\\Users\\Administrator\\Documents");directory.register(watchService,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.ENTRY_DELETE);// 循环检查 WatchKeywhile (true) {WatchKey key = watchService.take();for (WatchEvent<?> event : key.pollEvents()) {WatchEvent.Kind<?> kind = event.kind();if (kind == StandardWatchEventKinds.OVERFLOW) {continue;}// 获取事件发生的文件名@SuppressWarnings("unchecked")WatchEvent<Path> pathEvent = (WatchEvent<Path>) event;Path fileName = pathEvent.context();// 打印事件类型和文件名System.out.println("Event: " + kind + ", File: " + fileName);}key.reset();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql实战——Mysql8.0高可用之双主+keepalived

一、介绍 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;两台Mysql数据库的数据保持完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库宕机…

NB55 牛的生长情况

描述 在一个牧场中&#xff0c;有n头牛&#xff0c;每头牛的体重都在增长。给定一个整数数组weights&#xff0c;表示每天的牛的平均体重&#xff0c;返回一个数组growth&#xff0c;其中growth[i]是指对于第i天&#xff0c;下一个平均体重更高的是在几天后。如果在这之后平均…

AI大模型的推理显存占用分析

了解Transformer架构的AI大模型显存占用是非常重要的&#xff0c;特别是在训练和推理过程中。以下是详细解释和分析这些组成部分及其影响的专业描述&#xff1a; 1 显存占用 1.1 模型本身参数 模型的参数包括所有的权重和偏置项&#xff0c;这些参数需要存储在显存中&#x…

四川景源畅信:新人做抖店的成本很高吗?

随着社交媒体的兴起&#xff0c;抖音成为了一个新兴的电商平台——抖店。不少创业者和商家看中了其庞大的用户基础&#xff0c;想要通过开设抖店来拓展销路。然而&#xff0c;对于刚入行的新手来说&#xff0c;成本问题总是让人犹豫不决。究竟新人做抖店的成本高不高?本文将围…

ML307R OpenCPU TCP使用

一、TCP通信流程 二、示例 三、TCP通信代码 一、TCP通信流程 ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度 二、示例 实验目的:实现把接收的数据再发送到服务端 测试网址:TCP电脑端测试网址 因为是4G,所以必须用外网的 /* 测试前请先补充如下…

Flutter 中的 CupertinoDatePicker 小部件:全面指南

Flutter 中的 CupertinoDatePicker 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CupertinoDatePicker 是 Cupertino 组件库的一部分&#xff0c;它提供了一个 iOS 风格的日期选择器。这个选择器允许用户选择日期和时间&#xff0c;非常适合需要符合 iOS 设计指南的应…

YOLOv10:实时端到端目标检测

Ao Wang Hui Chen∗  Lihao Liu Kai Chen Zijia Lin  Jungong Han Guiguang Ding Tsinghua University Corresponding Author. 文献来源&#xff1a;中英文对照阅读 摘要 在过去的几年里&#xff0c;YOLO 因其在计算成本和检测性能之间的有效平衡而成为实时目标检测领…

纯干货:做好数据库防泄密的关键

在当今数字化时代&#xff0c;数据库的安全与保密性对于企业和个人来说至关重要。数据库防泄密工作涉及到多种技术和策略&#xff0c;其中沙盒技术作为一种强大的安全机制&#xff0c;为数据库防泄密提供了新的可能性。那么&#xff0c;我们是否可以通过沙盒来实现数据库防泄密…

2024年5月22日 (周三) 叶子游戏新闻

《奇星协力》Steam抢先体验开启 求生城市建造Leikir Studio工作室开发的一款求生城市建造新游《奇星协力》Steam抢先体验开启&#xff0c;限时九折优惠&#xff0c;本作支持中文&#xff0c;感兴趣的玩家可以关注下了。 《原神》预告4.7版本前瞻特别节目 5月24日播出5月22日&am…

Qt 控件提升

什么是控件提升(Widget Promotion) 控件提升是一个在Qt编程中常见但容易被忽视的概念。简单来说,控件提升就是将一个基础控件(Base Widget)转换为一个更特定、更复杂的自定义控件(Custom Widget)。这样做的目的是为了在设计界面时能够使用更多高级功能,而不仅仅是Qt库提…

基于FPGA实现LED的闪烁——HLS

基于FPGA实现LED的闪烁——HLS 引言&#xff1a; ​ 随着电子技术的飞速发展&#xff0c;硬件设计和开发的速度与效率成为了衡量一个项目成功与否的关键因素。在传统的硬件开发流程中&#xff0c;工程师通常需要使用VHDL或Verilog等硬件描述语言来编写底层的硬件逻辑&#xff0…

springboot517基于SpringBoot+Vue的高校线上心理咨询室的设计与实现-手把手调试搭建

springboot517基于SpringBootVue的高校线上心理咨询室的设计与实现-手把手调试搭建 springboot517基于SpringBootVue的高校线上心理咨询室的设计与实现-手把手调试搭建-2024-3-17

基于Python实现可视化分析中国500强排行榜数据的设计与实现

基于Python实现可视化分析中国500强排行榜数据的设计与实现 “Design and Implementation of Visual Analysis for China’s Top 500 Companies Ranking Data using Python” 完整下载链接:基于Python实现可视化分析中国500强排行榜数据的设计与实现 文章目录 基于Python实现…

Docker 基础使用 (1)

文章目录 Docker 软件安装Docker 镜像仓库Docker 仓库指令Docker 镜像指令Docker 容器指令Docker 使用实例 —— 搭建 nginx 服务nginx 概念nginx 使用用 docker 启动 nginx 侧重对docker基本使用的概览。 Docker 软件安装 Linux Ubuntu 依次执行以下指令即可 # 更新软件包列…

第十二周 5.20 面向对象的三大特性(封装、继承、多态)(一)

一、封装 1.目前的程序无法保证数据的安全性、容易造成业务数据的错误 2.private:私有的&#xff0c;被private修饰的内容只能在本类中访问 3.为私有化的属性提供公开的get和set方法 (1)get方法&#xff0c;获取私有化属性的值&#xff1a; public 返回值类型 get属性名…

[SWPUCTF 2022 新生赛]奇妙的MD5... ...

目录 [SWPUCTF 2022 新生赛]奇妙的MD5 [GDOUCTF 2023]受不了一点 [LitCTF 2023]作业管理系统 注入点一&#xff1a;文件上传 注入点二&#xff1a;创建文件直接写一句话木马 注入点三&#xff1a;获取数据库备份文件 [LitCTF 2023]1zjs [SWPUCTF 2022 新生赛]奇妙的MD5 …

生成式AI的GPU网络技术架构

生成式AI的GPU网络 引言&#xff1a;超大规模企业竞相部署拥有64K GPU的大型集群&#xff0c;以支撑各种生成式AI训练需求。尽管庞大Transformer模型与数据集需数千GPU&#xff0c;但实现GPU间任意非阻塞连接或显冗余。如何高效利用资源&#xff0c;成为业界关注焦点。 张量并…

单调栈--

1.每日温度 那么单调栈的原理是什么呢&#xff1f;为什么时间复杂度是O(n)就可以找到每一个元素的右边第一个比它大的元素位置呢&#xff1f; 单调栈的本质是空间换时间&#xff0c;因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素&#xff0c;优点是整个数…

利用迭代方法求解线性方程组(Matlab)

一、问题描述 利用迭代方法求解线性方程组。 二、实验目的 掌握Jacobi 方法和Gauss-Seidel 方法的原理&#xff0c;能够编写代码实现两种迭代方法&#xff1b;能够利用代码分析线性方程组求解中的误差情况。 三、实验内容及要求 用代码实现&#xff1a;对下列方程中重新组织…

基于盲源分离和半盲源分离的心电信号伪影消除方法(MATLAB 2018)

心电信号是通过测量放置在人体皮肤上的电极之间的电位差来获取的&#xff0c;其本身具有信号微弱、频段低、不稳定等特性。因此ECG信号在实际采集时极易受到不同噪声的影响&#xff0c;这会造成心电图本身的波形形态特征的失真&#xff0c;从而导致错误诊断和对患者的不当治疗。…