Java IO的基本使用和常见类的介绍及其案例讲解

Java IO(Input/Output)是Java编程语言中用于处理输入输出的机制。IO包含了读取和写入数据的功能,可以实现文件的读写、网络通信、和各种设备的输入输出操作。在Java中,IO操作主要由输入流(Input Stream)和输出流(Output Stream)两个类别来完成。

Java IO包含了许多类和接口,为了更好地理解和使用Java IO,我们将逐一介绍它们,并附上相关的案例讲解。

  1. InputStream(输入流) InputStream是抽象类,用于从数据源(如文件或网络)读取字节。常用的子类有FileInputStream和ByteArrayInputStream。

案例:读取文件内容

import java.io.FileInputStream;
import java.io.IOException;

public class ReadFileExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("file.txt")) {
            int ch;
            while ((ch = fis.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        2. OutputStream(输出流) OutputStream也是抽象类,用于向数据目标(如文件或网络)写入字节。常用的子类有FileOutputStream和ByteArrayOutputStream。

案例:写入文件内容

import java.io.FileOutputStream;
import java.io.IOException;

public class WriteFileExample {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("file.txt")) {
            String content = "Hello, World!";
            fos.write(content.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        3. Reader(读取字符) Reader是用于读取字符的抽象类。与InputStream类似,Reader也有多个子类用于不同的字符输入源。

案例:读取文件内容

import java.io.FileReader;
import java.io.IOException;

public class ReadFileExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("file.txt")) {
            int ch;
            while ((ch = fr.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        4. Writer(写入字符) Writer是用于写入字符的抽象类。与OutputStream类似,Writer也有多个子类用于不同的字符输出目标。

案例:写入文件内容

import java.io.FileWriter;
import java.io.IOException;

public class WriteFileExample {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("file.txt")) {
            String content = "Hello, World!";
            fw.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        5. InputStream/OutputStream与Reader/Writer的转换 Java提供了InputStreamReader和OutputStreamWriter两个类,用于将字节流转换为字符流,或将字符流转换为字节流。这在处理包含非ASCII字符的文本时很有用。

案例:将文件内容从ISO-8859-1编码转换为UTF-8编码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class ConvertEncodingExample {
    public static void main(String[] args) {
        try (InputStreamReader isr = new InputStreamReader(new FileInputStream("input.txt"), "ISO-8859-1");
             OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
            int ch;
            while ((ch = isr.read()) != -1) {
                osw.write(ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        6. BufferedInputStream/BufferedOutputStream与BufferedReader/BufferedWriter Java提供了BufferedInputStream和BufferedOutputStream两个类,用于提高字节流的读写效率。类似地,BufferedReader和BufferedWriter用于提高字符流的读写效率。

案例:使用BufferedInputStream读取文件内容

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadFileExample {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file.txt"))) {
            int ch;
            while ((ch = bis.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        7. ByteArrayInputStream/ByteArrayOutputStream ByteArrayInputStream和ByteArrayOutputStream是用于处理字节数组的流类。它们不需要实际的数据源或目标,而是将字节数组作为输入和输出。

案例:使用ByteArrayInputStream读取字节数组

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ReadByteArrayExample {
    public static void main(String[] args) {
        byte[] data = {72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33};
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
            int ch;
            while ((ch = bais.read()) != -1) {
                System.out.print((char) ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

        8. PipedInputStream/PipedOutputStream PipedInputStream和PipedOutputStream是用于实现线程之间管道通信的流类。一个线程可以将数据写入PipedOutputStream,另一个线程可以从PipedInputStream中读取数据。

案例:使用PipedInputStream和PipedOutputStream实现线程间通信

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class PipeExample {
    public static void main(String[] args) {
        try {
            PipedInputStream pis = new PipedInputStream();
            PipedOutputStream pos = new PipedOutputStream(pis);

            Thread thread1 = new Thread(() -> {
                try {
                    String message = "Hello, World!";
                    pos.write(message.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        pos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

            Thread thread2 = new Thread(() -> {
                try {
                    int ch;
                    while ((ch = pis.read()) != -1) {
                        System.out.print((char) ch);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        pis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

            thread1.start();
            thread2.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上是Java IO的基本使用和常见类的介绍及案例讲解,希望对你深入了解Java IO有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多的一方建立外键,指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程,一门课程也可以…

javaWeb奶茶商城前后台系统

一、简介 在当前数字化时代,电子商务已成为人们生活中不可或缺的一部分。为了满足用户对奶茶的需求,我设计并实现了一个基于JavaWeb的奶茶商城前后台系统。该系统涵盖了用户前台和管理员后台两大模块,包括登录注册、商品展示、购物车管理、订…

java面向对象编程基础

对象: java程序中的对象: 本质上是一种特殊的数据结构 对象是由类new出来的,有了类就可以创建对象 对象在计算机的执行原理: student s1new student();每次new student(),就是在堆内存中开辟一块内存区域代表一个学生对象s1变…

蓝桥杯物联网Lora通信功能总结

1、LORA通信在函数LORA被初始化的时候就已经处于接收状态 即开机即能接收数据 2、LORA数据的接收以及发送都通过FIFO数据线 3、LORA的收发同时进行会产生FIFO数据线的通信干扰 4、LORA_Rx在FIFO中有数据的时候才会取出数据,FIFO没有数据会直接跳过 当LORA在发送数…

UDP建立聊天群

参考网上代码 接收端 #include<myhead.h> #define PRINT_ERR(msg) \ do \ { \ printf("%s,…

求解线性方程组

如图题意看出x1有且仅有两种可能&#xff0c;1或者0&#xff0c;且知道了所有a的值&#xff0c;且因为要求所得答案字典序最小&#xff0c;所以先假设x10。 又因a2x1x2所以可以求出x2的值&#xff0c;又如a2x1x2x3,所以可以求出x3的值依次求出所有x的值&#xff0c;但每求出一…

Java 基础知识- 创建线程的几种方式

大家好我是苏麟 , 今天聊聊创建线程的几种方式 . 创建线程的几种方式 1. 继承Thread类实现多线程 /*** className: ThreadTest* author: SL 苏麟**/ public class ThreadTest extends Thread{public static void main(String[] args) {ThreadTest threadTest new ThreadTes…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

ppp协议

一.实验拓扑 二.实验要求 1.R1和R2使用PPP链路直连&#xff0c;R2和R3把2条PPP链路捆绑为PPP MP直连 2.按照图示配置IP地址 3.R2对R1的PPP进行单向chap验证 4.R2和R3的PPP进行双向chap验证 三.实验思路 1.R2对R1进行ppp单向chap验证&#xff1a; R2配置为主&#xff0c;…

数据库语言一些基本操作

1&#xff0c;消除取值重复的行。 例如&#xff1a;查成绩不及格的学号&#xff1a;SELECT DISTINCT sno FROM SC WHERE grade<60. 这里使用DISTINCT表示取消取值重复的行。 2&#xff0c;比较。 例如&#xff1a;查计算机系全体学生的姓名&#xff1a;SELECT Sname FROM…

模拟实现字符串库函数(一)

在C语言的标准库中提供了很多针对字符串的库函数&#xff0c;这篇文章我们会学习并模拟实现几个简单的库函数 求字符串长度函数strlen strlen函数我们在之前已经用过很多次了&#xff0c;同时也模拟实现过&#xff0c;但是都不是模仿标准库中的strlen来实现&#xff0c;首先我…

三.寄存器(内存访问)

1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器&#xff0c;所以有时候用个别的寄存器先把数据段存储起来&#xff0c;再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段

pta-洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时&#xff0c;大气开始被木星吸走&#xff0c;而随着不断接近地木“刚体洛希极限”&#xff0c;地球面临被彻底撕碎的危险。但实际上&#xff0c;这个计算是错误的。 洛希极限&#xff08;Roche limit&#xff09;是一…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案&#xff1a; 第一种方式是使用request模拟请求&#xff0c;并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器&#xff0c;selenium自动化操作无头浏览器&#xff0c;由无头浏览器实现请求&#xff0c;对得到的数据进行解析。 第一种方…

实战高效RPC方案在嵌入式环境中的应用与揭秘

实战高效RPC方案在嵌入式环境中的应用与揭秘 开篇 在嵌入式系统开发中&#xff0c;大型项目往往采用微服务架构来构建&#xff0c;其核心思想是将一个庞大的单体应用分割成一系列小型、独立、松耦合的服务模块&#xff0c;这些模块可以是以线程或进程形式存在的多个服务单元。…

OpenHarmony开发-线程安全阻塞队列

概述 简介 ​线程安全阻塞队列SafeBlockQueue类&#xff0c;提供阻塞和非阻塞版的入队入队和出队接口&#xff0c;并提供可最追踪任务完成状态的的SafeBlockQueueTracking类。 #include <safe_block_queue.h> 涉及功能 接口说明 OHOS::SafeBlockQueue OHOS::SafeBl…

[Java C++] JNI开发

JNI&#xff08;Java Native Interface&#xff09;是 Java 提供的一种编程桥梁&#xff0c;它允许 Java 代码和本地&#xff08;Native&#xff09;代码进行交互。通过 JNI&#xff0c;Java 程序可以调用本地语言&#xff08;如C、C&#xff09;编写的代码&#xff0c;并且本地…

如何用python编写记录你女友的生日呢?

如何用python编写记录你女友的生日呢&#xff1f; 我这边写一个简单的 Python 程序示例,可以用来记录生日.这个程序将用户输入的姓名和生日信息保存到一个字典中,并允许用户查找特定姓名对应的生日信息. def record_birthday():birthdays {}while True:print("1. 添加生…

IP地址、子网掩码、网关

这些概念的来源 很久以前&#xff0c;有两个计算机想要相互通信&#xff0c;于是它们在自己的设备上安装了一个网卡&#xff0c;并用网线连接&#xff1a; 这个时候&#xff0c;又来了一个计算机想要加入它们&#xff0c;于是这三个计算机互相通过网线连接&#xff1a; 随着想…

taro之Swiper的使用

图样&#xff1a; 往往我们需要轮播图去显示我们想要的图片之类的 这是工作的代码 <View classNametop-title><SwiperclassNamebanner-swiperinterval{3000}circularautoplay>{homeBannerList.map((item) > {return (<SwiperItem key{item.id}><View…