【JavaSE基础】第十六章:IO流
一、理解
1.简单而言:流就是内存与存储设备之间传输数据的通道、管道。
2.流的分类:
(1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】
输入流:将< 存储设备 > 中的内容读入到 < 内存 > 中。
输出流:将< 内存 > 中的内容写入到 < 存储设备 > 中
(2) 按单位:
字节流:以字节为单位,可以操作所有类型的文件。
字符流:以字符为单位,只能操作文本类型的文件。
(3) 按功能:
节点流:具有基本的读写功能。
过滤流:在节点流的基础上,增加新的功能。
二、字节流
1.字节流的父类(抽象类)
(1) InputStream :字节输入流
对应的操作为读操作
功能方法:read 方法
(2) OutputStream: 字节输出流
对应的操作为写操作
功能方法:write 方法
2.字节流的子类-节点流
(1) FileOutputStream :文件字节输出流
a. 构造方法:
FileOutputStream fos = new FileOutputStream("D:\\test2\\a.txt");
参数:代表操作文件的路径,指定的文件夹必须存在,否则报错,错误信息为:
java.io.FileNotFoundException(文件找不到的异常);但是指定文件如果不存在,则系统默认创建一个新的
文件路径:绝对路径和相对路径
绝对路径:带有盘符的路径,例如 D:\\test2\\a.txt
相对路径:相对当前项目查找对应的路径,例如:
FileOutputStream fos = new FileOutputStream("file/a.txt");
b. 功能方法:
void write(int a):将单个字节内容写入到文件中
void close():关闭流,释放系统资源
public class TestFileOutputStream {public static void main(String[] args) throws IOException {// 1. 创建文件字节输出流对象FileOutputStream fos = new FileOutputStream("file/a.txt");// 2. 写文件fos.write(97);// 3. 关闭流: 释放资源fos.close();}
}
(2) FileInputStream :文件字节输入流
a.构造方法
FileInputStream fos=new FileInputStream(“file/a.txt”);
参数:代表要读取哪一个文件中的内容;如果指定的文件不存在,则系统不会自动创建,而是抛出异常:
java.io.FileNotFoundException: file\a.txt (系统找不到指定的文件)。
b. 功能方法:
int read():一次性读取一个字节,将读取的内容作为返回值进行返回,如果达到文件尾部,则返回-1
close():关闭流,释放资源
3.字节流的子类-过滤流
(1)
BufferedInputStream/BufferedOutputStream// 1. 创建文件输入 + 输出流FileInputStream fis = new FileInputStream("D:\\test\\ph.mp4");//读文件BufferedInputStream bis = new BufferedInputStream(fis);FileOutputStream fos = new FileOutputStream("file/ph_copy.mp4");BufferedOutputStream bos = new BufferedOutputStream(fos);// 2. 读和写while(true){int n=bis.read(); // 读if(n==-1) break;bos.write(n);}// 3. 关闭流fis.close();fos.close();
(2) 过滤流: ObjectOutputStream/ObjectInputStream
a. 增强了缓冲区功能
增强了读写8种基本数据类型和字符串功能
b. 增强了读写对象的功能 :readObject() 从流中读取一个对象 /
writeObject(Object obj) 向流中写入一个对象
c. 对象放在流上进行传输的过程称为对象序列化。对象序列化的要求: [ 重点 ]
参与对象序列化的对象对应的类,必须实现java.io.Serializable接口
transient修饰的属性,不参与对象序列化
对象序列化达到文件尾部的标识:
如果运行时抛出 java.io.EOFException,代表读取的文件达到尾部
对象序列化的细节:
如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的
如果对集合进行对象序列化,必须保证该集合中的所有元素是可序列化的
三、字符流
1.字符流的父类(抽象类):
(1) Reader :字符输入流
对应的操作为读操作
功能方法:read 方法
(2) Writer: 字符输出流
对应的操作为写操作
功能方法:write 方法
2.文件字符输入/输出流
(1) FileWriter 文件字符输出流,继承 Writer 中的方法:
public void write(int n):将单个字符写入到文件中
(2) FileReader 文件字符输入流,继承 Reader 中的方法:
public int read():一次读取一个字符的内容
3.字符过滤流
(1) BufferedReader :增强读取一行内容的方法
String readLine(): 一次性读取一行内容,返回值为 String ,达到文件尾部时,返回 null
(2) PriterWriter :一次性写入一行内容
println(String str):将一行内容写入到文件,自动换行
print(String str):将一行内容写入到文件,不自动换行
4.桥转换流
InputStreamReader 、 OutputStreamWriter
(1) 字符流和字符流之间转换的通道
(2) 指定编解码格式
public class TestInputStreamReader {public static void main(String[] args) throws IOException {// 1. 创建文件字节输入流对象( 基础流 ) -> 不能更改文件编码格式 (GBK)FileInputStream fis = new FileInputStream("file/m.txt");// 2. 创建桥转换流,指定编解码格式为 "GBK"InputStreamReader isr = new InputStreamReader(fis,"GBK");// 3. 包装过滤流:增强读操作BufferedReader br = new BufferedReader(isr);// 4. 读操作while(true){String s = br.readLine();if(s==null) break;System.out.println(s);}// 5. 关闭流br.close();}
}
package testio2;import java.io.*;
public class TestInputStreamReader {public static void main(String[] args) {BufferedReader br = null;try {// 1. 创建文件字节输入流对象(基础流 ) -> 不能更改文件编码格式 (GBK)FileInputStream fis = new FileInputStream("file/m.txt");// 2. 创建桥转换流,指定编解码格式为 "GBK"InputStreamReader isr = new InputStreamReader(fis, "GBK");// 3. 包装过滤流:增强读操作br = new BufferedReader(isr);// 4. 读操作while (true) {String s = br.readLine();if (s == null) break;System.out.println(s);}}catch (Exception e){e.printStackTrace();}finally {if(br!=null){// 5. 关闭流try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}相关文章:
【JavaSE基础】第十六章:IO流
一、理解 1.简单而言:流就是内存与存储设备之间传输数据的通道、管道。 2.流的分类: (1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】 输入流:将< 存储设备 > 中的内容读入到 < 内存 > 中。 输…...
常见漏洞—SSRF_FastCGI
FastCGI协议 简介 Fast CGI源自旧版本的CGI 路由/结构图 # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求(例如nginx) web server 是内容的分发者 当访问静态页面时,web server 会直接返回资源,例如index.htm…...
LeetCode 283.移动零(超简单讲解)
283.移动零 题目示例示例1示例2 解题思路快慢指针实现设计 详细代码 题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 示例1 …...
GIS原理及应用、地理坐标系与投影坐标系
文章目录 一、GIS定义1.1 地理信息系统1.2 建模1.3 相关教程1.4 GIS前沿方向 二、GIS数据格式2.1 矢量2.2 栅格2.3 矢量与栅格的区别 三、GIS数据组织3.1 抽象3.2 分层3.3 栅格与切片 四、坐标系4.1 坐标系简介4.2 大地坐标系GCS4.3 投影坐标系PCS4.4 投影变换 五、空间数据库与…...
用github镜像加速, --recursive还是去github站怎么处理?
小伙伴们大多碰到过github抽风的情况,时通时断,时快时慢,非常考验心情。 以前碰到连不上的时候,我大多就是在gitee和gitcode网站找一下镜像,找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…...
ctfshow-web 151-170-文件上传
151. 我们首先想到就是上传一句话木马。但是看源代码限制了png。 (1)改前端代码。 这里是前端限制了上传文件类型,那我们就改一下就好了嘛,改成php。 这里直接修改不行,给大家推荐一篇简短文章,大家就会了(…...
【电源专题】开关转换器使能(EN)管脚的几种不同方式
我们的文章说到了很多与使能有关的电源案例和原理,如下所示: 【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客...
5G学习笔记之SNPN系列之ID和广播消息
目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…...
Qt-Advanced-Docking-System配置及使用、心得
Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境(IDE)4.2. 图形设计软件4.3. 数据分…...
【Bolt.new + PromptCoder】三分钟还原油管主页
【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网:PromptCoder Bolt官网:https://bolt.new/ Bolt 是什么? Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示(Prompt)、运行&#x…...
影像组学+病理组学+深度学习人工智能应用
影像组学 基础学习内容: 特征提取:使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选:应用ICC、相关系数、mRMR、Lasso等方法。建模:使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估:通过A…...
RK3568平台(基础篇)io命令支持
一.什么是io命令 “io” 命令通常用于显示 Linux 系统中的 I/O 统计信息。它提供了有关磁盘读写操作的详细信息,包括每个块设备的读写次数、读写扇区数、读写延迟等。io命令可以直接操作某个寄存器,用于查看设置某个GPIO 引脚配置了什么iomux。 二.io命令支持 RK平台要支持…...
Yolov8源码分析
1、目录介绍 主要目录ultralitics(重点) 1、assets目录 这个文件保存了YOLO历史上可以说是最经典的两张图片,供大家测试程序来使用的。 2、cfg 这个文件下面保存了我们的模型配置文件,cfg目录是项目配置的集中地,其…...
Python中的装饰器`@functools.lru_cache`:用法、来源与应用 (中英双语)
今天看到一段源码 https://github.com/google-research/google-research/blob/master/instruction_following_eval/instructions_util.py 如下,对其中使用的装饰器函数感到好奇,所以产生了这篇博客。 functools.lru_cache(maxsizeNone) def _get_sentenc…...
思维图(GoT):解锁大模型解决复杂问题的能力
今天分享的是苏黎世联邦理工学院、华沙理工大学和Cledar联合发表的一篇文章:思维图:用大语言模型解决复杂问题 论文题目:Graph of Thoughts: Solving Elaborate Problems with Large Language Models 论文链接:https://arxiv.or…...
使用winscp从windows访问Ubuntu进行文件传输
Ubuntu 系统上的准备工作 • 安装 SSH 服务器: 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装,可以使用以下命令安装: sudo apt update sudo apt install openssh-server • 启动 SSH 服务: 确保 SSH 服务正在运行&a…...
Java全栈项目:实验室预约管理系统的设计与实现
一、项目介绍 实验室预约管理系统是一个基于Java全栈技术开发的Web应用系统,旨在提供便捷的实验室预约、管理和使用体验。本系统主要面向高校师生,实现实验室资源的智能化、信息化管理。 二、技术栈 前端技术 Vue.jsElement UIAxiosVue RouterVuex …...
使用 esrally race 测试 Elasticsearch 性能及 Kibana 可视化分析指南
前言: 在对 Elasticsearch 集群进行性能测试与调优的过程中,esrally 是官方推荐的测试工具。通过 esrally race 命令,我们可以模拟各种查询与索引负载,对集群进行基准测试。然而,仅看 esrally 的终端输出并不直观&…...
OpenAI 第七日 推出了一项新功能——ChatGPT的“Projects”
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
【小白51单片机专用教程】protues仿真AT89C51入门
课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
