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…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
