当前位置: 首页 > 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;所有涉及…...

2026 国内大厂 Java 最全面试真题(含场景方案+数据库+分布式必问)

开源一套金三银四自刷的面试题库&#xff0c;自己感觉还不错&#xff0c;也拿了几个 Offer&#xff08;三个大厂的&#xff0c;字节、蚂蚁、滴滴&#xff09;&#xff01;下面直接上干货哈&#xff01;需要获取得话可以在文末免费领取JVM 篇&#xff08;87 道&#xff09;JVM 篇…...

为什么92%的研究者搜不到关键书评?Perplexity图书评论搜索的3大认知盲区与实时校准方案

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;为什么92%的研究者搜不到关键书评&#xff1f; 学术资源检索的失效&#xff0c;往往并非源于信息缺失&#xff0c;而是检索逻辑与出版生态的错位。当前主流学术数据库&#xff08;如Google Scholar、CNKI、JS…...

保姆级教程:用Arduino IDE从零配置ESP32-CAM,5分钟搞定网络摄像头

零基础玩转ESP32-CAM&#xff1a;5分钟搭建智能网络摄像头的完整指南 第一次拿到ESP32-CAM这块小巧的开发板时&#xff0c;很多人都会被它丰富的功能所吸引——Wi-Fi连接、摄像头拍摄、甚至还能进行简单的人脸识别。但当你真正开始尝试用它搭建一个网络摄像头时&#xff0c;各种…...

如何在5分钟内掌握VSCode Mermaid图表实时预览:开发者终极指南

如何在5分钟内掌握VSCode Mermaid图表实时预览&#xff1a;开发者终极指南 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 还在为编写技术文档时需要在代码编辑器与图表预览工…...

RK3568扩展模块实战:4G/Wi-Fi 6/多串口集成与Linux驱动适配

1. 项目概述&#xff1a;当“小”模块遇上“大”平台最近在折腾一块瑞芯微的RK3568开发板&#xff0c;这板子性能不错&#xff0c;四核A55加上独立的NPU&#xff0c;做边缘计算、多媒体网关或者轻量级服务器都挺合适。但在实际项目落地时&#xff0c;我遇到了一个几乎所有硬件开…...

高效实战:MicroPython ST7789显示屏驱动库深度解析

高效实战&#xff1a;MicroPython ST7789显示屏驱动库深度解析 【免费下载链接】st7789py_mpy Driver for 320x240, 240x240, 135x240 and 128x128 ST7789 displays written in MicroPython 项目地址: https://gitcode.com/gh_mirrors/st/st7789py_mpy ST7789显示屏驱动…...

RISC-V SoC中TileLink互连验证IP的设计与实战应用

1. 项目概述&#xff1a;为什么RISC-V SoC需要一个专门的TileLink验证IP&#xff1f;如果你正在设计或验证一个基于RISC-V的片上系统&#xff08;SoC&#xff09;&#xff0c;尤其是当它集成了多个处理器核心、加速器、DMA控制器和各种内存控制器时&#xff0c;那么“互连”这个…...

骁龙855深度解析:5G基带集成与移动芯片架构演进

1. 从爆料到现实&#xff1a;骁龙855的早期信息拼图2018年初&#xff0c;当搭载骁龙845的手机才刚刚在市场上崭露头角时&#xff0c;关于其继任者的传闻就已经开始流传。对于像我这样长期关注移动芯片发展的从业者来说&#xff0c;每一代旗舰SoC的迭代节奏都像是一场精心编排的…...

浏览器Cookie本地导出实战指南:Get-cookies.txt-LOCALLY深度解析

浏览器Cookie本地导出实战指南&#xff1a;Get-cookies.txt-LOCALLY深度解析 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发和自动化测试…...

SAP查询字段定义的字符数

用户常会问到“***的文本描述可以输入多少个字符”。 操作步骤&#xff1a; 输入事物代码&#xff1a;SE11就能看到字段配置的字符数量。如何获得表名称&#xff1a;&#xff08;OBB8举例&#xff09; 操作步骤&#xff1a; 输入事物代码&#xff1a;OBB8...