当前位置: 首页 > news >正文

【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.简单而言&#xff1a;流就是内存与存储设备之间传输数据的通道、管道。 2.流的分类&#xff1a; (1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】 输入流&#xff1a;将< 存储设备 > 中的内容读入到 < 内存 > 中。 输…...

常见漏洞—SSRF_FastCGI

FastCGI协议 简介 Fast CGI源自旧版本的CGI 路由/结构图 # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求&#xff08;例如nginx&#xff09; web server 是内容的分发者 当访问静态页面时&#xff0c;web server 会直接返回资源&#xff0c;例如index.htm…...

LeetCode 283.移动零(超简单讲解)

283.移动零 题目示例示例1示例2 解题思路快慢指针实现设计 详细代码 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 示例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抽风的情况&#xff0c;时通时断&#xff0c;时快时慢&#xff0c;非常考验心情。 以前碰到连不上的时候&#xff0c;我大多就是在gitee和gitcode网站找一下镜像&#xff0c;找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…...

ctfshow-web 151-170-文件上传

151. 我们首先想到就是上传一句话木马。但是看源代码限制了png。 &#xff08;1&#xff09;改前端代码。 这里是前端限制了上传文件类型&#xff0c;那我们就改一下就好了嘛,改成php。 这里直接修改不行&#xff0c;给大家推荐一篇简短文章&#xff0c;大家就会了&#xff08…...

【电源专题】开关转换器使能(EN)管脚的几种不同方式

我们的文章说到了很多与使能有关的电源案例和原理,如下所示: 【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客...

5G学习笔记之SNPN系列之ID和广播消息

目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN&#xff1a;Stand-alone Non-Public Network&#xff0c;独立的非公共网络&#xff0c;由NPN独立运营&#xff0c;不依赖与PLMN网络。 SNPN不支持的5GS特性&#xff1a; 与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. 集成开发环境&#xff08;IDE&#xff09;4.2. 图形设计软件4.3. 数据分…...

【Bolt.new + PromptCoder】三分钟还原油管主页

【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网&#xff1a;PromptCoder Bolt官网&#xff1a;https://bolt.new/ Bolt 是什么&#xff1f; Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示&#xff08;Prompt&#xff09;、运行&#x…...

影像组学+病理组学+深度学习人工智能应用

影像组学 基础学习内容&#xff1a; 特征提取&#xff1a;使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选&#xff1a;应用ICC、相关系数、mRMR、Lasso等方法。建模&#xff1a;使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估&#xff1a;通过A…...

RK3568平台(基础篇)io命令支持

一.什么是io命令 “io” 命令通常用于显示 Linux 系统中的 I/O 统计信息。它提供了有关磁盘读写操作的详细信息,包括每个块设备的读写次数、读写扇区数、读写延迟等。io命令可以直接操作某个寄存器,用于查看设置某个GPIO 引脚配置了什么iomux。 二.io命令支持 RK平台要支持…...

Yolov8源码分析

1、目录介绍 主要目录ultralitics&#xff08;重点&#xff09; 1、assets目录 这个文件保存了YOLO历史上可以说是最经典的两张图片&#xff0c;供大家测试程序来使用的。 2、cfg 这个文件下面保存了我们的模型配置文件&#xff0c;cfg目录是项目配置的集中地&#xff0c;其…...

Python中的装饰器`@functools.lru_cache`:用法、来源与应用 (中英双语)

今天看到一段源码 https://github.com/google-research/google-research/blob/master/instruction_following_eval/instructions_util.py 如下&#xff0c;对其中使用的装饰器函数感到好奇&#xff0c;所以产生了这篇博客。 functools.lru_cache(maxsizeNone) def _get_sentenc…...

思维图(GoT):解锁大模型解决复杂问题的能力

今天分享的是苏黎世联邦理工学院、华沙理工大学和Cledar联合发表的一篇文章&#xff1a;思维图&#xff1a;用大语言模型解决复杂问题 论文题目&#xff1a;Graph of Thoughts: Solving Elaborate Problems with Large Language Models 论文链接&#xff1a;https://arxiv.or…...

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…...

Java全栈项目:实验室预约管理系统的设计与实现

一、项目介绍 实验室预约管理系统是一个基于Java全栈技术开发的Web应用系统&#xff0c;旨在提供便捷的实验室预约、管理和使用体验。本系统主要面向高校师生&#xff0c;实现实验室资源的智能化、信息化管理。 二、技术栈 前端技术 Vue.jsElement UIAxiosVue RouterVuex …...

使用 esrally race 测试 Elasticsearch 性能及 Kibana 可视化分析指南

前言&#xff1a; 在对 Elasticsearch 集群进行性能测试与调优的过程中&#xff0c;esrally 是官方推荐的测试工具。通过 esrally race 命令&#xff0c;我们可以模拟各种查询与索引负载&#xff0c;对集群进行基准测试。然而&#xff0c;仅看 esrally 的终端输出并不直观&…...

OpenAI 第七日 推出了一项新功能——ChatGPT的“Projects”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【小白51单片机专用教程】protues仿真AT89C51入门

课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白&#xff0c;因此会对各个新出现的知识点在实例基础上进行详细讲解&#xff0c;有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容&#xff0c;所有涉及…...

正则表达式——元字符匹配(单字符)

单字符匹配: ###注意事项&#xff1a;前面要加r&#xff1a;如(re.findall(r\w,字符串名)) #. :匹配任意一个字符 (.本身通过\.匹配) # [ ]: 匹配[ ]中的字符 # \d: 匹配数字 # \D: 匹配非数字 # \s: 匹配空白(空格) # \S:匹配非空白 # \w: 匹配单词字符&#xff08;a…...

快速在远程服务器执行命令、批量在多个服务器执行命令(基于sshpass的自定义脚本fastsh)

在日常服务器操作中&#xff0c;很多时候我们需要同时操作多个服务器。特别对于那些每个服务器都需要操作相同命令的场景&#xff0c;不断的切换命令会话窗口会比较麻烦。基于此&#xff0c;编写了本文中的 fastsh 脚本用于轻度解决这种问题&#xff0c;提高一定的便利性。 使…...

【中间件介绍及案例分析】

中间件介绍及案例分析 一、中间件的定义 中间件是一种位于操作系统、网络和数据库之上&#xff0c;应用软件之下的软件。它的主要作用是为处于不同系统中的软件组件提供通用服务&#xff0c;使得这些软件组件能够更好地通信、协同工作&#xff0c;并且帮助开发人员更高效地构…...

CRMEB PHP多商户版DOCKER部署实战

#首先&#xff0c;制作docker 镜像# 官方有一个镜像&#xff0c;但是拉不来下&#xff0c;也不知道是没是没有维护&#xff0c;嘎了。只能自己动手做一个。 这里选择ubuntu 24 为基础&#xff0c;制作crmeb-mer的镜像&#xff0c;Dockerfile内容如下&#xff1a; # 使用官方…...

Node.js基础入门

1.Node.js 简介 Node 是一个让 JavaScript (独立)运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。 简单的说 Node.js 就是运行在服务端的…...

Hive——HQL数据定义语言

文章目录 Hive HQL数据查询语言更多大数据资源持续更新中。。。学习目标一、HQL数据定义语言&#xff08;DDL&#xff09;概述1、DDL语法的作用2、Hive中DDL使用☆ 创建数据库☆ 查询数据库☆ 切换数据库☆ 修改数据库☆ 删除数据库 二、Hive DDL建表基础1、完整建表语法树2、H…...

vLLM 教程上新!覆盖从入门到进阶 4 种应用方式;中文文档同步上线,0 帧起手加速大模型推理

如今&#xff0c;大语言模型 (LLM) 的发展正在从规模参数迭代升级拓展至应用场景的适配与创新&#xff0c;在这个过程中&#xff0c;其也暴露出一系列问题。例如&#xff0c;在推理环节的效率较低&#xff0c;处理复杂任务时耗时较长&#xff0c;难以满足对实时性要求较高的场景…...

Kubernetes# RBAC访问控制

目录 定义 配置对象 Role ClusterRole ServiceAccount RoleBinding ClusterRoleBinding 配置示例 定义 Kubernetes的运行是由多种类型的资源组合起来&#xff0c;每种资源各司其职完成整个集群的功能。那么自然也需要一套机制控制资源的访问权限&#xff0c;保证安全性…...

如何实现后端返回excel文件,在前端下载功能

前言 简单记录一下&#xff0c;excel文件导出下载功能 一、后端接口返回excel文件 把自己生成的workbook 以文件流的方式&#xff0c;返回前台 Workbook workbook employeeConfirmationDefectService.exportPoorPolishExcel(budatBegin, budatEnd, queryWrapper);//传输到…...

编程:一场不设防的智慧江湖

在数字的汪洋中&#xff0c;有一片从未设置年龄禁区的领地——编程世界。许多人会问&#xff1a;35岁了&#xff0c;还能学编程吗&#xff1f;答案是&#xff1a;不仅能学&#xff0c;还能学得很精彩。 时光荏苒&#xff0c;科技浪潮汹涌澎湃。曾经&#xff0c;人们以为编程是…...