Java IO流详解(史上最全18个案例代码)

每文一句

每想拥抱你一次,天空飘落一片雪,至此雪花拥抱撒哈拉! —荷西

一、IO流开篇

1. 概念:

IO(Input/Output)流是Java中用于处理输入和输出数据的机制。它允许程序与外部设备(如文件、网络连接、内存等)进行数据交换。IO流按照操作单位的不同可以分为字节流和字符流两种类型。

2. 流的分类:

  • 字节流(Byte Streams):以字节为单位进行操作,适用于处理二进制数据或不需要进行字符编码转换的场景。主要的字节流类包括InputStream和OutputStream及其子类。
  • 字符流(Character Streams):以字符为单位进行操作,适用于处理文本数据并支持字符编码转换。主要的字符流类包括Reader和Writer及其子类。

3. IO流的作用:

  • 实现数据的输入和输出:通过IO流,可以从外部源中读取数据到程序中,或者将程序中的数据写入到外部源中。
  • 处理文件操作:可以通过IO流读取、写入文件,实现文件的读取、写入和操作。
  • 网络通信:通过IO流可以实现网络通信,包括建立Socket连接、传输数据等。

4. IO流的使用场景:

  • 文件操作:读取、写入和处理文件。
  • 网络编程:建立Socket连接,进行网络通信。
  • 数据处理:通过IO流实现数据的输入、输出和处理,包括序列化、反序列化等操作。
  • 图像处理:读取、写入图像文件,并进行图像处理操作。

二、字节流

字节流常用类

字节流是Java中处理字节数据的流,主要用于处理二进制数据或不需要进行字符编码转换的情况。以下是常用的字节流类:

1. InputStream(输入流)及其子类:

  • FileInputStream:用于从文件中读取数据的输入流。
  • ByteArrayInputStream:从内存中的字节数组中读取数据的输入流。
  • BufferedInputStream:带有缓冲区的输入流,可以提高读取性能。
  • DataInputStream:读取基本数据类型的输入流,例如intdouble等。
  • ObjectInputStream:用于反序列化对象的输入流,可以将对象从字节流中恢复为原来的对象。

2. OutputStream(输出流)及其子类:

  • FileOutputStream:用于向文件中写入数据的输出流。
  • ByteArrayOutputStream:将数据写入到内存中的字节数组的输出流。
  • BufferedOutputStream:带有缓冲区的输出流,可以提高写入性能。
  • DataOutputStream:写入基本数据类型的输出流,例如intdouble等。
  • ObjectOutputStream:用于序列化对象的输出流,可以将对象转换为字节流进行持久化存储。

字节流使用案例

1. FileInputStream(文件输入流):

  • 简单介绍: 用于从文件中读取数据的输入流。
  • 应用场景: 读取文件内容,进行数据处理和分析。
  • 代码演示:
    import java.io.FileInputStream;
    import java.io.IOException;public class FileInputStreamExample {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("example.txt")) {int data;while ((data = fis.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
    }
    

2. FileOutputStream(文件输出流):

  • 简单介绍: 用于向文件中写入数据的输出流。
  • 应用场景: 将程序中的数据写入文件,如日志记录、数据持久化等。
  • 代码演示:
    import java.io.FileOutputStream;
    import java.io.IOException;public class FileOutputStreamExample {public static void main(String[] args) {String data = "Hello, FileOutputStream!";try (FileOutputStream fos = new FileOutputStream("output.txt")) {fos.write(data.getBytes());} catch (IOException e) {e.printStackTrace();}}
    }
    

3. ByteArrayInputStream(字节数组输入流)

  • 简单介绍: 从字节数组中读取数据的输入流。
  • 应用场景: 将字节数组作为数据源,进行数据的读取和处理。
  • 代码演示:
    import java.io.ByteArrayInputStream;
    import java.io.IOException;public class ByteArrayInputStreamExample {public static void main(String[] args) {byte[] bytes = {72, 101, 108, 108, 111};try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) {int data;while ((data = bais.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
    }
    

4. ByteArrayOutputStream(字节数组输出流)

  • 简单介绍: 将数据写入到字节数组的输出流。
  • 应用场景: 将程序中的数据写入字节数组,便于数据传输和处理。
  • 代码演示:
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;public class ByteArrayOutputStreamExample {public static void main(String[] args) {String data = "Hello, ByteArrayOutputStream!";try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {baos.write(data.getBytes());byte[] result = baos.toByteArray();System.out.println(new String(result));} catch (IOException e) {e.printStackTrace();}}
    }
    

5. BufferedInputStream(缓冲输入流)

  • 简单介绍: 带有缓冲区的输入流,提高读取性能。
  • 应用场景: 从文件中读取大量数据时,通过缓冲区减少IO操作次数,提升读取效率。
  • 代码演示:
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;public class BufferedInputStreamExample {public static void main(String[] args) {try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"))) {int data;while ((data = bis.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();}}
    }
    

6. BufferedOutputStream(缓冲输出流)

  • 简单介绍: 带有缓冲区的输出流,提高写入性能。
  • 应用场景: 向文件中写入大量数据时,通过缓冲区减少IO操作次数,提升写入效率。
  • 代码演示:
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;public class BufferedOutputStreamExample {public static void main(String[] args) {String data = "Hello, BufferedOutputStream!";try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {bos.write(data.getBytes());} catch (IOException e) {e.printStackTrace();}}
    }
    

7. DataInputStream(数据输入流)

  • 简单介绍: 读取基本数据类型的数据的输入流。
  • 应用场景: 读取通过DataOutputStream写入的基本数据类型数据。
  • 代码演示:
    import java.io.DataInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;public class DataInputStreamExample {public static void main(String[] args) {try (DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"))) {int intValue = dis.readInt();double doubleValue = dis.readDouble();System.out.println("Int value: " + intValue);System.out.println("Double value: " + doubleValue);} catch (IOException e) {e.printStackTrace();}}
    }
    

8. DataOutputStream(数据输出流)

  • 简单介绍: 将基本数据类型的数据写入文件的输出流。
  • 应用场景: 将程序中的基本数据类型数据写入文件,便于持久化存储。
  • 代码演示:
    import java.io.DataOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;public class DataOutputStreamExample {public static void main(String[] args) {try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"))) {int intValue = 42;double doubleValue = 3.14;dos.writeInt(intValue);dos.writeDouble(doubleValue);} catch (IOException e) {e.printStackTrace();}}
    }
    

9. ObjectInputStream(对象输入流)

  • 简单介绍: 用于反序列化对象的输入流,可以将对象从字节流中恢复为原来的对象。
  • 应用场景: 用于读取通过 ObjectOutputStream 序列化的对象数据,恢复为原来的对象。
  • 代码演示:
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;public class ObjectInputStreamExample {public static void main(String[] args) {try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"))) {// 从文件中读取对象MyClass obj = (MyClass) ois.readObject();System.out.println("Object read from file: " + obj);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
    }
    

10. ObjectOutputStream(对象输出流)

  • 简单介绍: 用于将对象序列化为字节流并写入文件的输出流,可以将对象持久化存储。
  • 应用场景: 用于将程序中的对象数据序列化为字节流,保存到文件中或传输到网络。
  • 代码演示:
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;public class ObjectOutputStreamExample {public static void main(String[] args) {MyClass obj = new MyClass("John", 30);try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"))) {// 将对象写入文件oos.writeObject(obj);System.out.println("Object written to file: " + obj);} catch (IOException e) {e.printStackTrace();}}
    }
    

三、字符流

字符流常用类

字符流是Java中处理字符数据的流,主要用于处理文本数据并支持字符编码转换。以下是常用的字符流类:

1. Reader(读取字符流)及其子类

  • FileReader:从文件中读取字符数据的字符输入流。
  • BufferedReader:带有缓冲区的字符输入流,提高读取性能。
  • InputStreamReader:将字节流转换为字符流的桥梁,支持指定字符编码。
  • StringReader:从字符串中读取字符数据的字符输入流。

2. Writer(写入字符流)及其子类

  • FileWriter:向文件中写入字符数据的字符输出流。
  • BufferedWriter:带有缓冲区的字符输出流,提高写入性能。
  • OutputStreamWriter:将字符流转换为字节流的桥梁,支持指定字符编码。
  • StringWriter:将字符数据写入到字符串中的字符输出流。

字符流使用案例

1. FileReader(文件读取字符流)

  • 简单介绍: 用于从文件中读取字符数据的字符输入流。
  • 应用场景: 读取文本文件中的内容,进行处理或分析。
  • 代码演示:
    import java.io.FileReader;
    import java.io.IOException;public class FileReaderExample {public static void main(String[] args) {try (FileReader reader = new FileReader("example.txt")) {int character;while ((character = reader.read()) != -1) {System.out.print((char) character);}} catch (IOException e) {e.printStackTrace();}}
    }
    

2. FileWriter(文件写入字符流)

  • 简单介绍: 用于向文件中写入字符数据的字符输出流。
  • 应用场景: 将程序中生成的文本数据写入文件,如日志记录等。
  • 代码演示:
    import java.io.FileWriter;
    import java.io.IOException;public class FileWriterExample {public static void main(String[] args) {String data = "Hello, FileWriter!";try (FileWriter writer = new FileWriter("output.txt")) {writer.write(data);} catch (IOException e) {e.printStackTrace();}}
    }
    

3. BufferedReader(带缓冲的字符读取流)

  • 简单介绍: 带有缓冲区的字符输入流,可以提高读取性能。
  • 应用场景: 从文件中读取大量字符数据时,通过缓冲区减少IO操作次数,提升读取效率。
  • 代码演示:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;public class BufferedReaderExample {public static void main(String[] args) {try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
    }
    

4. BufferedWriter(带缓冲的字符写入流)

  • 简单介绍: 带有缓冲区的字符输出流,可以提高写入性能。
  • 应用场景: 向文件中写入大量字符数据时,通过缓冲区减少IO操作次数,提升写入效率。
  • 代码演示:
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;public class BufferedWriterExample {public static void main(String[] args) {String data = "Hello, BufferedWriter!";try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {writer.write(data);} catch (IOException e) {e.printStackTrace();}}
    }
    

5. InputStreamReader(字节流到字符流的桥梁)

  • 简单介绍: 将字节流转换为字符流的桥梁,支持指定字符编码。
  • 应用场景: 从字节流中读取字符数据,并根据指定的字符编码转换为字符流。
  • 代码演示:
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;public class InputStreamReaderExample {public static void main(String[] args) {try (InputStreamReader isr = new InputStreamReader(new FileInputStream("example.txt"), "UTF-8")) {int character;while ((character = isr.read()) != -1) {System.out.print((char) character);}} catch (IOException e) {e.printStackTrace();}}
    }
    

6. OutputStreamWriter(字符流到字节流的桥梁)

  • 简单介绍: 将字符流转换为字节流的桥梁,支持指定字符编码。
  • 应用场景: 将字符数据转换为字节流,并根据指定的字符编码写入到字节流中。
  • 代码演示:
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;public class OutputStreamWriterExample {public static void main(String[] args) {String data = "Hello, OutputStreamWriter!";try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8")) {osw.write(data);} catch (IOException e) {e.printStackTrace();}}
    }
    

7. StringReader(从字符串读取字符流)

  • 简单介绍: 从字符串中读取字符数据的字符输入流。
  • 应用场景: 将字符串数据作为输入源,进行字符数据的读取和处理。
  • 代码演示:
    import java.io.StringReader;
    import java.io.IOException;public class StringReaderExample {public static void main(String[] args) {String data = "Hello, StringReader!";try (StringReader reader = new StringReader(data)) {int character;while ((character = reader.read()) != -1) {System.out.print((char) character);}} catch (IOException e) {e.printStackTrace();}}
    }
    

8. StringWriter(写入字符到字符串)

  • 简单介绍: 将字符数据写入到字符串中的字符输出流。
  • 应用场景: 将程序中生成的字符数据写入字符串中,方便后续处理或输出。
  • 代码演示:
    import java.io.StringWriter;
    import java.io.IOException;public class StringWriterExample {public static void main(String[] args) {try (StringWriter writer = new StringWriter()) {String data = "Hello, StringWriter!";writer.write(data);System.out.println(writer.toString());} catch (IOException e) {e.printStackTrace();}}
    }
    

四、完结撒花ING

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot的新闻稿件管理系统论文

新闻稿件管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了新闻稿件管理系统的开发全过程。通过分析新闻稿件管理系统管理的不足,创建了一个计算机管理新闻稿件管理系统的方案。文章介绍了新…

适用于ZigBee应用的JN5168/001K、JN5188HN、JN5188THN/001Z、JN5189THN超低功耗射频微控制器MCU

一、JN5168/001K 适用于ZigBee应用的超低功耗、高性能无线微控制器 JN5168是超低功耗、高性能无线微控制器,适用于ZigBee应用,它具有256kB嵌入式闪存、32 kB RAM,无需外部存储器即可进行OTA升级。32位RISC处理器可通过不同宽度指令、多级指令…

稀碎从零算法笔记Day5-LeetCode:多数元素

题型:数组、计数、排序、STL函数、查找众数 链接:169. 多数元素 - 力扣(LeetCode) 来源:LeetCode 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 题目描述 给定一个大小为 n …

pytorch图像显示色彩不对

一、背景 对一张人脸进行卷积,发现图像显示不对。180x180的图,3x3的卷积核,按理说卷出来应该与原图差别不大,但出来的图像很奇怪。 从左至右依次为:原图、空洞卷积图、正常卷积图。 事后分析,上米娜的图像…

IS-IS网络收敛

IPV6是网络学习中最重要的内容之一,本文将从IPv6的基本结构、地址类型等方面详细介绍IPv6的重点学习内容。 想要更多网工专业学习资料,可直接找我领取。(文末领取) 为了提高IS-IS网络的收敛,有快速收敛和按优先级收敛…

TikTok黑屏怎么办?快来试试这5个方法!

当今社交媒体的热潮中,TikTok跨境电商占据了重要的一席之地。然而,频繁的黑屏、app打开没有内容显示却成了许多用户的头疼问题。如果你也正在寻找TikTok黑屏的解决办法,那么本文将为你提供5种可能的解决方案。无论你是在使用TikTok国际版黑屏…

内含教程丨音色克隆模型 GPT-SoVITS,5 秒语音就能克隆出相似度 95% 的声音

「语音」是人类接触 AI 的「早教技术」,同时也是最早一批走出实验室,走进千家万户的 AI 技术。最初,人们针对智能语音的研究主要集中在语音识别上,即让机器听懂人类语言。 最早的基于电子计算机的语音识别系统是由 AT&T 贝尔实…

c++的队列的用法

基本介绍 c的队列就是std::queue。 需要包含的头文件&#xff1a; #include<queue>queue就是先进先出队列 queue,就是队列&#xff0c;队列是一种容器适配器&#xff0c;专门设计用于在FIFO上下文中操作(先进先出)&#xff0c;其中将元素插入容器的一端并从另一端提…

基于“xxx” Androidx平台的驱动及系统开发 之 触摸板篇

目录 一、基于全志 A133 Android10平台&#xff0c;适配1366x768 - ilitek2511触摸1、原理图分析2、驱动移植与适配3、补丁和资源文件 二、基于瑞芯微 RK3566 Android11平台&#xff0c;适配GT9XX触摸1、原理图分析2、补丁及资源文件 三、遇到的问题与解决1、基于amlogic Andro…

【c++】 string类的模拟实现

1.浅拷贝 浅拷贝&#xff1a;也称位拷贝&#xff0c;编译器只是将对象中的值拷贝过来。如果对象中管理资源&#xff0c;最后就会导致多个对象共享同一份资源&#xff0c;当一个对象销毁时就会将该资源释放掉&#xff0c;而此时另一些对象不知道该资源已经被释放&#xff0c;以…

【C++基础】STL容器面试题分享||上篇

&#x1f308;欢迎来到C基础专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C STL 1.请说说 STL 的基本组成部分2.详细的说&…

xss.haozi.me:0x03及04

这里有一个正则所以&#xff08;&#xff09;要用到实体编码 <a href"javascript:alert1">cc</a> 03 04都一样

密码安全:保护你的数据不被入侵的重要性

title: 密码安全&#xff1a;保护你的数据不被入侵的重要性 date: 2024/3/5 17:54:56 updated: 2024/3/5 17:54:56 tags: 密码安全个人隐私保护身份盗窃防护金融损失防范弱密码危害安全密码创建双因素认证 在数字时代&#xff0c;密码安全是保护个人和机构数据的关键。然而&am…

如何做代币分析:以 INJ 币为例

如何做代币分析&#xff1a;以 INJ 币为例 作者&#xff1a; lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;INJ 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作…

Linux——自写一个简易的shell

目录 前言 一、打印提示信息 二、分割字符串 三、替换程序 前言 之前学习了很多进程相关的知识&#xff0c;包括环境变量、进程的创建与退出、进程等待、进程替换。现在可以用所学的作一个小总结&#xff0c;手撕一个shell解释器&#xff0c;大致的思路是先通过环境变量获…

(vue)适合后台管理系统开发的前端框架

(vue)适合后台管理系统开发的前端框架 1、D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2、vue-el…

服务器上部署WEb服务方法

部署Web服务在服务器上是一个比较复杂的过程。这不仅仅涉及到配置环境、选择软件和设置端口&#xff0c;更有众多其它因素需要考虑。以下是在服务器上部署WEb服务的步骤&#xff1a; 1. 选择服务器&#xff1a;根据项目规模和预期访问量&#xff0c;选择合适的服务器类型和配置…

Linux 进程间通信

目录 管道 匿名管道&#xff08;pipe&#xff09; 有名管道&#xff08;fifo&#xff09; 小结 共享内存 消息队列 信号量 System V IPC的结构设计 Posix与System V的关系 管道 匿名管道&#xff08;pipe&#xff09; 我们知道&#xff0c;在Linux中通过fork创建的子…

OpenDDS之QosXml库编译(Windows + VS2019)

目录 1、需求背景2、基础环境3、编译xercesc3.1、下载xercesc3.2、编译xercesc 4、编译ACE_XML_Utils4.1、生成XML_Utils解决方案4.2、编译XML_Utils 5、编译QOS_XML_XSC_Handlerd5.1、生成QOS_XML_XSC_Handlerd解决方案5.2、编译QOS_XML_XSC_Handlerd 6、测试例子6.1、生成dum…

光影交织:汽车穿越隧道的视觉盛宴

在繁忙的城市中&#xff0c;隧道成为了连接两端的重要通道。而对于汽车来说&#xff0c;穿越隧道不仅是一次简单的空间转移&#xff0c;更是一场融合了视觉、技术与安全的独特体验。 当汽车缓缓驶入隧道&#xff0c;外界的光线逐渐减弱&#xff0c;隧道内部的光线开始发挥作用。…