Java NIO Files类读取文件流方式详解
Java NIO Files类读取文件流方式详解
Files类原理概述
java.nio.file.Files是Java标准库提供的一个工具类,用于操作文件和目录。它提供了一系列静态方法,可以用于创建、复制、删除、移动、重命名、读取、写入文件和目录等常见的文件系统操作。同时,它也提供了一些高级特性,如文件系统监控、文件属性操作等。在Java 7中引入,用于替代旧的java.io.File类。
Java NIO中的Files类提供了许多静态方法,用于操作文件和目录。它是Java NIO中处理文件的核心组件之一,基于Java NIO的FileChannel和Path组件实现。在使用Files类读取文件时,主要涉及到以下几个核心方法:
Path get(String first, String... more):根据指定的路径字符串创建一个Path对象。byte[] readAllBytes(Path path):读取指定文件的所有字节到一个字节数组中。List<String> readAllLines(Path path, Charset cs):读取指定文件的所有文本行到一个列表中。Stream<String> lines(Path path, Charset cs):返回一个Stream对象,用于读取指定文件的所有文本行。
使用Files类读取文件的实现原理主要涉及到Path和FileChannel两个核心组件。当我们使用Files类读取文件时,首先需要使用Path对象创建一个文件路径,然后使用FileChannel打开一个文件通道,最后读取文件的内容到指定的数据结构中。
以下是使用Java NIO读取文件的步骤:
- 通过
java.nio.file.Path类创建文件路径对象,例如:Path path = Paths.get("file.txt"); - 通过
java.nio.file.Files类读取文件内容,例如:byte[] bytes = Files.readAllBytes(path);或List<String> lines = Files.readAllLines(path);readAllBytes()方法可以一次性读取文件的所有字节,并返回一个byte[]数组。readAllLines()方法可以逐行读取文本文件的内容,并返回一个List<String>对象,其中每个元素表示文件中的一行文本数据。
- 对于较大的文件,可以使用
java.nio.file.Files类的newByteChannel()方法创建一个java.nio.channels.FileChannel对象,并使用ByteBuffer类缓存内容,以提高效率。例如:
Path path = Paths.get("file.txt");
try (FileChannel channel = FileChannel.open(path)) {ByteBuffer buffer = ByteBuffer.allocate(1024);while (channel.read(buffer) > 0) {buffer.flip();// 读取buffer中的内容buffer.clear();}
} catch (IOException e) {e.printStackTrace();
}
在上述示例中,我们使用FileChannel.open()方法打开一个文件通道,并使用ByteBuffer.allocate()方法创建一个缓冲区,最后通过循环读取缓冲区中的内容。
注意在读取之前需要调用flip()方法将缓冲区从写模式切换到读模式,以便读取缓冲区中的内容。
案例
下面我们来看一个使用Java NIO的Files类读取文件的案例,假设我们有一个文本文件,需要按行读取其中的内容,并输出到控制台上。使用Java NIO的Files类可以轻松地实现这个功能,代码如下所示:
Path path = Paths.get("file.txt");
try {List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);for (String line : lines) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}
在上述代码中,我们首先使用Paths.get()方法创建一个Path对象,指定要读取的文件路径。然后使用Files.readAllLines()方法读取文件的所有文本行,返回一个包含所有文本行的列表。最后使用循环遍历列表,逐行输出文本内容到控制台上。
除了readAllLines()方法,Files类还提供了其他读取文件的方式,如readAllBytes()方法可以将文件的所有字节读取到一个字节数组中,lines()方法可以返回一个Stream对象,用于逐行读取文件内容。这些方法都可以轻松地实现对文件内容的读取和处理。
Path path = Paths.get("file.txt");
try {Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8);lines.forEach(line -> {String[] words = line.split("\\s+");System.out.println("Line: " + line + ", Word Count: " + words.length);});
} catch (IOException e) {e.printStackTrace();
}
在上述代码中,我们首先使用Paths.get()方法创建一个Path对象,指定要读取的文件路径。然后使用Files.lines()方法返回一个Stream对象,用于逐行读取文件内容。最后使用forEach()方法遍历Stream对象中的每一行文本内容,统计每行的单词个数并输出到控制台上。
在forEach()方法中,我们首先使用split()方法将每行文本按空格分割成一个单词数组,然后通过length属性获取单词数组的长度,即为该行单词的个数。最后输出该行文本和单词个数到控制台上。
使用Files类的lines()方法可以轻松地实现对文本文件内容的逐行读取和处理,同时也可以根据具体需求对每行文本进行其他处理,如单词统计、文本匹配等。
小结
本文介绍了Java NIO中的Files类的原理和案例。通过使用Path和FileChannel的高效读写机制,Files类可以大大提高文件读写的效率,尤其是在处理大文件时。同时,Files类还提供了其他读取文件的方式,可以更好地满足应用程序的需求。在实际开发中,可以根据具体需求选择合适的文件操作方式,来提高应用程序的性能和可靠性。
相关文章:
Java NIO Files类读取文件流方式详解
Java NIO Files类读取文件流方式详解 Files类原理概述 java.nio.file.Files是Java标准库提供的一个工具类,用于操作文件和目录。它提供了一系列静态方法,可以用于创建、复制、删除、移动、重命名、读取、写入文件和目录等常见的文件系统操作。同时&…...
Mybatis快速入门,Mybatis的核心配置文件
Mybatis快速入门 一、Mybatis简介1.1Mybatis简化JDBC 二、Mybatis快速入门2.1创建user表,添加数据2.2创建模块,导入坐标2.3编写Mybatis核心配置文件 --> 替换连接信息,解决硬编码问题2.4编写SQL映射文件 --> 统一管理sql语句࿰…...
go语言中defer执行顺序
defer 执行顺序和调用顺序相反,类似于栈后进先出。 defer在 return 之后执行,但在函数推出之前,defer可以修改返回值。 func test() int {i : 0defer func() {fmt.Println("defer1")}()defer func() {i 1fmt.Println("defe…...
webpack xxx is not a constructor
环境 webpack5.88.2 vue-router 按需引入 原因 模块循环引用导致 有A B C三个模块 A B模块import C 中导出的class c又依赖B 中Class 的方法 B 又依赖C中的class 此时会导致import 的 C 为undefined...
安装支持vs2019的MFC(解决MSBuild 错误 MSB8041、MSB8042)
安装支持MFC的vs2019(解决MSBuild 错误 MSB8041、MSB8042) 常用安装选项解决MSBuild 错误 常用安装选项 解决MSBuild 错误 安装上述勾选内容后,即可解决MSBuild 错误 MSB8041 MSB8041:此项目需要 MFC/ATL 库。 https://learn.mic…...
校园电气安全风险分析及预防措施 安科瑞 许敏
摘要:校园属于人员密集场所,若安全风险排查、管控不到位,可能导致安全事故发生,造成严重事故后果。校园电气设备设施引起的电气火灾和触电等事故,是构成校园安全威胁之一,笔者通过对校园发生的电气安全事故案例原因分析…...
机器学习之十大经典算法
机器学习算法是计算机科学和人工智能领域的关键组成部分,它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法,其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法,每种算法都在特定的领…...
系统架构设计师 11:未来信息综合技术
本章花了很多笔墨来写各项技术的发展历程,可以了解一下。 一、信息物理系统 信息物理系统(Cyber-Physical Systems,CPS)是控制系统、嵌入式系统的扩展与延伸。 CPS典型的应用场景有:健康管理、智能维护、远程征兆性…...
Docker 数据管理[文件互访] 端口映射[暴露端口提供服务] 容器互联[指定容器名防止IP变动]
Docker 的数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷(宿主机与容器间传输 防止删除容器后数据丢失) 数…...
【stable diffusion】保姆级入门课程04-Stable diffusion(SD)图生图-局部重绘的用法
目录 0.本章素材 1.什么是局部重绘 2.局部重绘和涂鸦有什么不同 3.操作界面讲解 3.1.蒙版模糊 3.2.蒙版模式 3.3.蒙版蒙住的内容 3.4.重绘区域 4.局部重绘的应用(面部修复) 5.课后训练 0.本章素材 chilloutmix模型(真人模型)百度地址…...
制作Java8环境Docker镜像
制作Java8环境Docker镜像 这里介绍如何制作一个java8环境的镜像,用于运行java应用程序。 1.安装包 这里采用OpenJDK,不会涉及版本问题。 同样思源中文字体也是开源的,没有版权问题。 OpenJDK8:OpenJDK8U-jdk_x64_linux_hotsp…...
抖音SEO源码开发指南:介绍如何开发抖音SEO源码的基本步骤和要点。
一、 抖音SEO源码开发指南: 确定目标:首先要明确开发抖音SEO源码的目标是什么,是提高搜索排名还是增加用户量等。根据不同的目标来制定开发策略和思路。 分析竞争:对于同类产品,要进行竞争分析,了解对手的…...
【SDOF振荡器的非线性-非弹性多轴时间响应分析】用于SDOF振荡器非线性非弹性时程分析的鲁棒性分析研究(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 💥1 概述 进行SDOF振荡器的非线性非弹性时程分析的鲁棒性分析研究,旨在探究该方法对不同系统参数和分析条件变化的稳定性和可靠性。以下是一…...
VMPWN的入门系列-1
5.1 实验一 VMPWN1 5.1.1 题目简介 这是一道基础的VM相关题目,VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析,但是这道题目不接受字节码,它接收字节码的更高一级语言:汇编。程序直接接收类似”mov…...
将标签中某一个类别添加到另一个标签中
现在有两张CItyscapes数据集的标签,假设我想把第二张图骑车的人添加到第一张图,暂且不考虑添加位置的变换,那么该如何操作呢? 1:将骑车的人和车作为两个类别独立于其他的类别出来。 2:将这两个类别作为一个…...
将指定图片控件中的图片闪烁
/// <summary> /// 将指定图片控件中的图片闪烁 /// </summary> /// <param name"pic">需要闪烁的图片控件</param> public static void FlashImage(object picBox) { try …...
【MySQL】表的增删查改
目录 一、Create创建 1、单行数据全列插入 2、多行数据指定列插入 3、插入更新 4、替换 二、Retrieve查询 1、SELECT 列 1.1、 全列查询 1.2、指定列查询 1.3、查询字段为表达式 1.4、结果去重 2、where条件 2.1、英语不及格的同学及英语成绩 ( < 60 ) 2.2、语…...
Python 爬虫的学习 day01 ,爬虫的基本知识, requests 和 charde模块, get函数的使用
1.Python 爬虫 1.1什么是网络爬虫 网络爬虫,又称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 1.2 网络爬虫的特…...
【数据挖掘】时间序列的傅里叶变换:用numpy解释的快速卷积
一、说明 本篇告诉大家一个高级数学模型,即傅里叶模型的使用; 当今,傅里叶变换及其所有变体构成了我们现代世界的基础,为压缩、通信、图像处理等技术提供了动力。我们从根源上理解,从根本上应用,这是值得付…...
Chatgpt Web API 创建对话,免费,不计token数量,模仿网页提交对话
Chatgpt API 是收费的,按token使用量计费 Chatgpt Web API 免费的,只要有账号就可以使用。 curl https://chat.openai.com/backend-api/conversation \-H authority: chat.openai.com \-H accept: text/event-stream \-H accept-language: zh-CN,zh;q…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
