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

Java知识点——IO流

目录

一、IO流基础概念

二、常见的IO流类

三、字符流

1.字符输入流(Reader)与字符输出流(Writer)

2.常用实现类

3.实例

四、字节流

1.字节输入流(InputStream)与字节输出流(OutputStream)

2.实例


一、IO流基础概念

        在Java中,IO流被抽象为一系列类和接口,主要分为两大类:输入流(InputStream/Reader)输出流(OutputStream/Writer)

  1. 输入流:用于从数据源读取数据。例如,FileInputStream用于读取文件,BufferedReader用于高效读取字符数据。

  2. 输出流:用于向数据目的地写入数据。例如,FileOutputStream用于写入文件,PrintWriter用于格式化输出文本。

        根据处理的数据类型不同,IO流又可以分为:

  1. 字节流:处理8位字节数据。如InputStream和OutputStream,适用于二进制文件(如图片、音频)的读写。

  2. 字符流:处理16位Unicode字符数据。如Reader和Writer,适用于文本文件的读写。

二、常见的IO流类

  1. FileInputStream与FileOutputStream

    这两个类是最基本的文件字节流,用于读写二进制文件。

    FileInputStream fis = new FileInputStream("input.txt");
    FileOutputStream fos = new FileOutputStream("output.txt");
  2. FileReader与FileWriter

    与字节流对应,这两个类用于字符文件的读写。

    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt");
  3. BufferedReader与BufferedWriter

    这两个类提供了缓冲功能,提高了字符流的读写效率。

    BufferedReader br = new BufferedReader(new FileReader("input.txt"));
    BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
  4. 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代码仓库 架构 从高层次来看&#xff0c;这些系统的步骤如下&#xff1a; 将问题转换为SQL查询&#xff1a;模型将用户输入转换为SQL查询。 执行SQL查询&#xff1a;执行查询。 回答问题&#xff1a;模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…...

时间转换(acwing)c/c++/java/python

读取一个整数值&#xff0c;它是工厂中某个事件的持续时间&#xff08;以秒为单位&#xff09;&#xff0c;请你将其转换为小时&#xff1a;分钟&#xff1a;秒来表示。 输入格式 输入一个整数 NN。 输出格式 输出转换后的时间表示&#xff0c;格式为 hours:minutes:second…...

连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接

文章目录 一. 前言二. 解决方案 方案1方案2 三. 总结 一. 前言 在《数据库原理》这门课的实验上&#xff0c;需要使用SQL Server&#xff0c;然后使用jdbc连接sql server突然报错为&#xff1a;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&#xff08;同步通信&#xff09; ch : make(chan int) // 创建有缓冲 Channel&#xff08;容量为5&#xff0c;异步通信&#xff09; bufferedCh : make(chan int, 5) // 发送数据到 Channel ch <- 42 // 从…...

pyside6学习专栏(七):自定义QTableWidget的扩展子类QTableWidgetEx

PySide6界面编程中较常用的控件还有QTableWidget表格控件&#xff0c;用来将加载的数据在表格中显示出来&#xff0c;下面继承QTableWidget编写其扩展子类QTableWidgetEx,来实现用单元格来显示除数据文字外&#xff0c;还可以对表格的单元格的文字颜色、背景底色进行设置&#…...

Mybatis常用动态 SQL 相关标签

1. <if> 用于条件判断&#xff0c;当满足条件时执行对应的 SQL 片段。 示例: <select id"findUser" resultType"User">SELECT * FROM usersWHERE 11<if test"name ! null and name ! ">AND name #{name}</if><if…...

AWQ和GPTQ量化的区别

一、前言 本地化部署deepseek时发现&#xff0c;如果是量化版的deepseek&#xff0c;会节约很多的内容&#xff0c;然后一般有两种量化技术&#xff0c;那么这两种量化技术有什么区别呢&#xff1f; 二、量化技术对比 在模型量化领域&#xff0c;AWQ 和 GPTQ 是两种不同的量…...

ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?

目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…...

基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

go 日志框架

内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF&#xff0c;而不是…...

如何在 PDF 文件中嵌入自定义数据

由于 PDF 文件格式功能强大且灵活&#xff0c;它经常被用于内部工作流程。有时候&#xff0c;将自定义数据嵌入 PDF 文件本身会非常有用。通常&#xff0c;这些信息会被大多数工具忽略&#xff0c;因此 PDF 仍然可以作为普通 PDF 文件正常使用。 以下是一些实现方法&#xff1…...

计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

22.回溯算法4

递增子序列 这里不能排序&#xff0c;因为数组的顺序是对结果有影响的&#xff0c;所以只能通过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);作用&#xff1a;复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回&#xff1a;成功返回新的文件描述符&#xff0c;失败…...

技术解析 | 适用于TeamCity的Unreal Engine支持插件,提升游戏构建效率

龙智是JetBrains授权合作伙伴、Perforce授权合作伙伴&#xff0c;为您提供TeamCity、Perforce Helix Core等热门的游戏开发工具及一站式服务 TeamCity 是游戏开发的热门选择&#xff0c;大家选择它的原因包括支持 Perforce、可以进行本地安装&#xff0c;并提供了多种配置选项。…...

Ubuntu22.04 - brpc的安装和使用

目录 介绍安装使用 介绍 brpc 是用 c语言编写的工业级 RPC 框架&#xff0c;常用于搜索、存储、机器学习、广告、推荐等高性能系统 安装 先安装依赖 apt-get install -y git g make libssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev libgflags-d…...

网络运维学习笔记 018 HCIA-Datacom综合实验02

文章目录 综合实验2sw3&#xff1a;sw4&#xff1a;gw&#xff1a;core1&#xff08;sw1&#xff09;&#xff1a;core2&#xff08;sw2&#xff09;&#xff1a;ISP 综合实验2 sw3&#xff1a; vlan 2 stp mode stp int e0/0/1 port link-type trunk port trunk allow-pass v…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...