Java字符流:用轻松的方式处理文本数据!

《Java零基础教学》是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始,适合初学者快速入门,同时也从实例的角度进行了深入浅出的讲解,让初学者能够更好地理解Java编程思想和应用。

本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识,并提供丰富的实例和练习,帮助读者巩固所学知识。本教程不仅适合初学者学习,也适合已经掌握一定 Java 基础的读者进行查漏补缺。

前言

在Java中,文本数据是经常处理的一种数据类型,而字符流就是用来处理文本数据的一种流。

相比于字节流,字符流可以更方便地处理文本数据,尤其是在处理中文文本数据时,字符流的优势更加明显。

在本文中,将介绍Java字符流的基本概念、常用类和方法,以及如何使用字符流来读写文件。

摘要

本文将会介绍以下内容:

  • Java字符流的概念和作用
  • 字符流的常用类和方法
  • 如何使用字符流来读写文件
  • 应用示例和测试用例

Java字符流的概念和作用

在Java中,字符流是用来处理文本数据的一种流。它是一种高级的流,能够更加方便地处理文本数据,特别是在处理中文文本数据时,字符流的优势更加明显。

字符流将流中的字节数据按照指定的编码方式(如UTF-8、GBK等)转换成字符数据,从而方便地对文本数据进行读写操作。

字符流主要包括两种类型:字符输入流和字符输出流。

字符输入流用于从文件或其他数据源中读取字符数据,常用的字符输入流类有FileReader和InputStreamReader。

字符输出流用于将字符数据写入文件或其他数据目标,常用的字符输出流类有FileWriter和OutputStreamWriter。

字符流的常用类和方法

字符输入流

FileReader类

FileReader类是Java中最基本的字符输入流类之一,它用于从文件中读取字符数据。

FileReader类的构造方法如下:

java 复制代码
public FileReader(String fileName) throws FileNotFoundException
public FileReader(File file) throws FileNotFoundException

FileReader类的常用方法如下:

java 复制代码
public int read() throws IOException
public int read(char[] cbuf) throws IOException
public int read(char[] cbuf, int off, int len) throws IOException
public void close() throws IOException

其中,read()方法用于读取一个字符,read(char[] cbuf)方法用于读取一个字符数组,read(char[] cbuf, int off, int len)方法用于读取指定长度的字符数组,close()方法用于关闭输入流。

InputStreamReader类

InputStreamReader类是Java中另一个常用的字符输入流类,它能够将字节输入流转换为字符输入流。

InputStreamReader类的构造方法如下:

java 复制代码
public InputStreamReader(InputStream in)
public InputStreamReader(InputStream in, String charsetName)

InputStreamReader类的常用方法和FileReader类相似,这里不再赘述。

字符输出流

FileWriter类

FileWriter类是Java中最基本的字符输出流类之一,它用于向文件中写入字符数据。

FileWriter类的构造方法如下:

java 复制代码
public FileWriter(String fileName) throws IOException
public FileWriter(String fileName, boolean append) throws IOException
public FileWriter(File file) throws IOException
public FileWriter(File file, boolean append) throws IOException

FileWriter类的常用方法如下:

java 复制代码
public void write(int c) throws IOException
public void write(char[] cbuf) throws IOException
public void write(char[] cbuf, int off, int len) throws IOException
public void write(String str) throws IOException
public void write(String str, int off, int len) throws IOException
public void flush() throws IOException
public void close() throws IOException

其中,write()方法用于写入字符数据,flush()方法用于刷新缓冲区,close()方法用于关闭输出流。

OutputStreamWriter类

OutputStreamWriter类是Java中另一个常用的字符输出流类,它能够将字节输出流转换为字符输出流。

OutputStreamWriter类的构造方法如下:

java 复制代码
public OutputStreamWriter(OutputStream out)
public OutputStreamWriter(OutputStream out, String charsetName)

OutputStreamWriter类的常用方法和FileWriter类相似,这里不再赘述。

如何使用字符流来读写文件

使用字符流来读写文件的步骤如下:

  1. 创建字符输入流对象或字符输出流对象,根据需求选择FileReader、InputStreamReader、FileWriter、OutputStreamWriter等类。
  2. 调用流对象的读或写方法,对文件进行读写操作。
  3. 关闭流对象。

下面是一个使用字符流读取文件的示例代码:

java 复制代码
public static void main(String[] args) {
    try {
        FileReader reader = new FileReader("test.txt");
        int ch;
        while ((ch = reader.read()) != -1) {
            System.out.print((char) ch);
        }
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

测试截图如下:

下面是一个使用字符流写入文件的示例代码:

java 复制代码
public static void main(String[] args) {
    try {
        FileWriter writer = new FileWriter("test.txt");
        writer.write("Hello, world!");
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

测试执行截图如下:

应用示例和测试用例

下面是一个使用字符流读取文件并计算文件中字符数量的示例代码:

java 复制代码
    @Test
    public void testFileReaderAndCount() {

        try {
            FileReader reader = new FileReader("test.txt");
            int count = 0;
            int ch;
            while ((ch = reader.read()) != -1) {
                count++;
            }
            reader.close();
            System.out.println("文件中共有 " + count + " 个字符。");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

测试用例执行结果如下:

读取 Hello, world! 内容确实是13个字符。

下面是一个使用字符流写入文件再读取的测试用例代码:

java 复制代码
    @Test
    public void testWriteAndReadFile() {

        try {
            FileWriter writer = new FileWriter("test.txt");
            writer.write("goodbye!my friends");
            writer.close();

            FileReader reader = new FileReader("test.txt");
            int ch;
            while ((ch = reader.read()) != -1) {
                System.out.print((char) ch);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

测试用例执行结果如下:

全文小结

本文主要介绍了Java字符流的概念、常用类和方法,以及如何使用字符流来读写文件。

字符流是用来处理文本数据的一种流,能够更方便地处理文本数据,特别是在处理中文文本数据时,字符流的优势更加明显。

在使用字符流进行文件读写时,需要注意关闭流对象,以保证文件资源能够正确地释放。

最后,为了更好地了解字符流的使用方法,本文还提供了一个应用示例和测试用例供读者参考。

最后

大家如果觉得看了本文有帮助的话,麻烦给个三连(点赞、分享、转发)支持一下哈。

相关推荐
罗政2 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
架构文摘JGWZ2 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师3 小时前
spring获取当前request
java·后端·spring
aPurpleBerry3 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏3 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko3 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985944 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
IT学长编程4 小时前
计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·毕业设计·springboot·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·教师科研管理系统
m0_571957584 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解