Java知识点——IO流
目录
一、IO流基础概念
二、常见的IO流类
三、字符流
1.字符输入流(Reader)与字符输出流(Writer)
2.常用实现类
3.实例
四、字节流
1.字节输入流(InputStream)与字节输出流(OutputStream)
2.实例
一、IO流基础概念
在Java中,IO流被抽象为一系列类和接口,主要分为两大类:输入流(InputStream/Reader)和输出流(OutputStream/Writer)。
-
输入流:用于从数据源读取数据。例如,FileInputStream用于读取文件,BufferedReader用于高效读取字符数据。
-
输出流:用于向数据目的地写入数据。例如,FileOutputStream用于写入文件,PrintWriter用于格式化输出文本。
根据处理的数据类型不同,IO流又可以分为:
-
字节流:处理8位字节数据。如InputStream和OutputStream,适用于二进制文件(如图片、音频)的读写。
-
字符流:处理16位Unicode字符数据。如Reader和Writer,适用于文本文件的读写。
二、常见的IO流类
-
FileInputStream与FileOutputStream
这两个类是最基本的文件字节流,用于读写二进制文件。
FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt"); -
FileReader与FileWriter
与字节流对应,这两个类用于字符文件的读写。
FileReader fr = new FileReader("input.txt"); FileWriter fw = new FileWriter("output.txt"); -
BufferedReader与BufferedWriter
这两个类提供了缓冲功能,提高了字符流的读写效率。
BufferedReader br = new BufferedReader(new FileReader("input.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt")); -
DataInputStream与DataOutputStream
这两个类允许读取和写入基本Java数据类型(如int、float、String等),便于处理结构化数据。
DataInputStream dis = new DataInputStream(new FileInputStream("data.dat")); DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));
三、字符流
1.字符输入流(Reader)与字符输出流(Writer)
字符输入流用于从数据源(如文件、字符串等)读取字符数据。Reader 是所有字符输入流的抽象基类。
字符输出流用于将字符数据写入目标(如文件、控制台等)。Writer 是所有字符输出流的抽象基类。
2.常用实现类
2.1 输入流:
- FileReader 用于从文件中读取字符数据。
- InputStreamReader 将字节流转换为字符流,可以指定字符编码。
- BufferedReader 提供缓冲功能,提高读取效率,支持按行读取。
2.2 输出流:
- FileWriter 用于将字符数据写入文件。
- OutputStreamWriter 将字符流转换为字节流,可以指定字符编码。
- BufferedWriter 提供缓冲功能,提高写入效率,支持按行写入。
3.实例
3.1 CharacterInputExample
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class CharacterInputExample {public static void main(String[] args) {try {
// FileReader reader =new FileReader("input.txt");
// //逐个字符进行读取
// int data;
// while((data=reader.read())!=-1){
// System.out.println((char)data);
// }BufferedReader br=new BufferedReader(new FileReader("input.txt"));//逐行读取String line;while((line=br.readLine())!=null){System.out.println(line);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
3.2 CharacterOutputExample
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class CharacterOutputExample {public static void main(String[] args) {
// try(FileWriter writer=new FileWriter("output.txt");){
// writer.write("Hello World!\n");
// writer.write("This is a new line.\n");
// } catch (IOException e) {
// e.printStackTrace();
// }try {FileWriter writer=new FileWriter("output.txt");writer.write("Hello!\n");writer.write("This is a new line.");writer.close();//没有这个数据写入不进去} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// //使用BufferedWriter按行写入文件
// try(BufferedWriter bw=new BufferedWriter(new FileWriter("output.txt"));){
// bw.write("Hello,World!");//写入字符串
// bw.newLine();//写入换行符
// bw.write("This is a new line.");//写入另一行
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }}}
- 字符输入流(Reader)用于读取文本数据,常用类包括 FileReader 和 BufferedReader。
- 字符输出流(Writer)用于写入文本数据,常用类包括 FileWriter 和 BufferedWriter。
- 字符流适合处理文本文件,支持字符编码,能够高效地读写文本数据。
3.3 Writer类的写入方法
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class WriterExample {public static void main(String[] args) {try {Writer writer=new FileWriter("output.txt");//1.写入单个字符writer.write('H');//2.写入字符数组char[] array={'e','l','l','o'};writer.write(array);//3.写入字符数组的一部分writer.write(array,1,2);//写入“ll”//4.写入字符串writer.write(",World");//5.写入字符串的一部分String str="\nThis is Java IO.";writer.write(str,0,11);//写入"This is Ja"System.out.println("数据已写入文件");writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
四、字节流
1.字节输入流(InputStream)与字节输出流(OutputStream)
InputStream 是所有字节输入流的抽象基类,它定义了读取字节数据的基本方法。常见的字节输入流子类有 FileInputStream、ByteArrayInputStream 等。
OutputStream 是所有字节输出流的抽象基类,它定义了写入字节数据的基本方法。常见的字节输出流子类有 FileOutputStream、ByteArrayOutputStream 等。
2.实例
2.1 ByteInputStreamExample
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class ByteInputStreamExample {public static void main(String[] args) {try {FileInputStream fis = new FileInputStream("input.txt");InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//读取单个字节int data;while((data=isr.read())!=-1){System.out.print((char)data);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
2.2 ByteOutputStreamExample
import java.io.FileOutputStream;
import java.io.IOException;public class ByteOutputStreamExample {public static void main(String[] args) {try(FileOutputStream fos=new FileOutputStream("output.txt");) {String data="Hello,World!";byte[] bytes=data.getBytes();//写入字节数组fos.write(bytes);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
2.3 结合使用字节输入流和输出流进行文件复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopyExample {public static void main(String[] args) {try {FileInputStream fis=new FileInputStream("input.txt");FileOutputStream fos=new FileOutputStream("output.txt");byte[] buffer=new byte[1024];int bytesRead;//从输入流读取数据并写入输出流while((bytesRead=fis.read(buffer))!=-1){fos.write(buffer,0,bytesRead);}System.out.println("文件复制成功!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
相关文章:
Java知识点——IO流
目录 一、IO流基础概念 二、常见的IO流类 三、字符流 1.字符输入流(Reader)与字符输出流(Writer) 2.常用实现类 3.实例 四、字节流 1.字节输入流(InputStream)与字节输出流(OutputStrea…...
uniapp h5端和app端 使用 turn.js
前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…...
使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统
GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据…...
时间转换(acwing)c/c++/java/python
读取一个整数值,它是工厂中某个事件的持续时间(以秒为单位),请你将其转换为小时:分钟:秒来表示。 输入格式 输入一个整数 NN。 输出格式 输出转换后的时间表示,格式为 hours:minutes:second…...
连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接
文章目录 一. 前言二. 解决方案 方案1方案2 三. 总结 一. 前言 在《数据库原理》这门课的实验上,需要使用SQL Server,然后使用jdbc连接sql server突然报错为:SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertific…...
基于CNN的FashionMNIST数据集识别3——模型验证
源码 import torch import torch.utils.data as Data from torchvision import transforms from torchvision.datasets import FashionMNIST from model import LeNetdef test_data_process():test_data FashionMNIST(root./data,trainFalse,transformtransforms.Compose([tr…...
go channel 的用法和核心原理、使用场景
一、Channel 的核心用法 1. 基本操作 // 创建无缓冲 Channel(同步通信) ch : make(chan int) // 创建有缓冲 Channel(容量为5,异步通信) bufferedCh : make(chan int, 5) // 发送数据到 Channel ch <- 42 // 从…...
pyside6学习专栏(七):自定义QTableWidget的扩展子类QTableWidgetEx
PySide6界面编程中较常用的控件还有QTableWidget表格控件,用来将加载的数据在表格中显示出来,下面继承QTableWidget编写其扩展子类QTableWidgetEx,来实现用单元格来显示除数据文字外,还可以对表格的单元格的文字颜色、背景底色进行设置&#…...
Mybatis常用动态 SQL 相关标签
1. <if> 用于条件判断,当满足条件时执行对应的 SQL 片段。 示例: <select id"findUser" resultType"User">SELECT * FROM usersWHERE 11<if test"name ! null and name ! ">AND name #{name}</if><if…...
AWQ和GPTQ量化的区别
一、前言 本地化部署deepseek时发现,如果是量化版的deepseek,会节约很多的内容,然后一般有两种量化技术,那么这两种量化技术有什么区别呢? 二、量化技术对比 在模型量化领域,AWQ 和 GPTQ 是两种不同的量…...
ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?
目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…...
基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
go 日志框架
内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…...
如何在 PDF 文件中嵌入自定义数据
由于 PDF 文件格式功能强大且灵活,它经常被用于内部工作流程。有时候,将自定义数据嵌入 PDF 文件本身会非常有用。通常,这些信息会被大多数工具忽略,因此 PDF 仍然可以作为普通 PDF 文件正常使用。 以下是一些实现方法࿱…...
计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
22.回溯算法4
递增子序列 这里不能排序,因为数组的顺序是对结果有影响的,所以只能通过used数组来去重 class Solution { public:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums,int start){if(path.si…...
linux -对文件描述符的操作dup、fcntl有五种
dup #include<unistd.h> int dup(int oldfd);作用:复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回:成功返回新的文件描述符,失败…...
技术解析 | 适用于TeamCity的Unreal Engine支持插件,提升游戏构建效率
龙智是JetBrains授权合作伙伴、Perforce授权合作伙伴,为您提供TeamCity、Perforce Helix Core等热门的游戏开发工具及一站式服务 TeamCity 是游戏开发的热门选择,大家选择它的原因包括支持 Perforce、可以进行本地安装,并提供了多种配置选项。…...
Ubuntu22.04 - brpc的安装和使用
目录 介绍安装使用 介绍 brpc 是用 c语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统 安装 先安装依赖 apt-get install -y git g make libssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev libgflags-d…...
网络运维学习笔记 018 HCIA-Datacom综合实验02
文章目录 综合实验2sw3:sw4:gw:core1(sw1):core2(sw2):ISP 综合实验2 sw3: vlan 2 stp mode stp int e0/0/1 port link-type trunk port trunk allow-pass v…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
