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…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
这篇学习笔记是Spring系列笔记的第7篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…...
