Java操作IO对象流进行数据的读写

针对Java操作IO(输入/输出)对象流进行数据的读写,一般包括以下的几个步骤:

  1. 创建IO对象流(如FileInputStream、FileOutputStream等)以及处理器流(如InputStreamReader、OutputStreamWriter等)
  2. 读、写或处理流中读写的数据(如读文本文件、写二进制文件等)
  3. 关闭流以释放资源,避免内存泄漏

具体步骤及示例可以参考下面的内容。

1. 创建IO对象流和处理器流

1.1 FileInputStream和FileOutputStream的使用示例

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

public class FileStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("input.txt");
            FileOutputStream outputStream = new FileOutputStream("output.txt");

            int c;
            while ((c = inputStream.read()) != -1) { // 从输入文件中读取数据
                outputStream.write(c); // 写入到输出文件中
            }

            inputStream.close(); // 关闭输入流
            outputStream.close(); // 关闭输出流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的示例中,在try代码块内创建了一个FileInputStream对象和一个FileOutputStream对象,分别用于输入和输出数据。在while循环中,读入input.txt文件的内容,并将其逐字节写入output.txt文件中。注意,这里只是演示了如何逐字节读写数据,并且还需要手动实现例如字符编码转换的操作。在实际应用中,可以使用处理器流来读写带有编码、格式化、缓冲等特性的文件。

1.2 InputStreamReader和OutputStreamWriter的使用示例

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class CharacterStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("input.txt");
            FileOutputStream outputStream = new FileOutputStream("output.txt");

            InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
            OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");

            char[] buffer = new char[4096];
            int length;
            while ((length = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, length); // 将buffer中的字符块写入到输出文件中
            }

            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的示例中,通过InputStreamReader和OutputStreamWriter实现了读写操作。可选的第二个参数为字符编码,这里使用UTF-8。读取器和写入器提供了buffer来存放读取或写入的字符。在循环中,按照最大读取长度,读取器从输入文件中读取字符块,并将其存入buffer数组中,然后写入器将buffer中的字符块写入到输出文件中。

2. 读、写或处理流中读写的数据

在实际使用IO对象流进行数据读写时,需要根据具体需要进行一些处理,例如对于文本文件的读写,如果需要将读取到的字节数组转化为字符串,则可以使用Java提供的String类的构造函数:String(byte[] bytes, int offset, int length, Charset charset),其中bytes为读取到的字节数组,offset为起始偏移量,length为读取的字节数,charset为字符编码。

下面是一个读取文本文件并将读取到的文本进行统计的示例:

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class TextFileExample {
    public static void main(String[] args) {
        Map<Character, Integer> charCountMap = new HashMap<>();
        try {
            FileInputStream inputStream = new FileInputStream("input.txt");
            byte[] buffer = new byte[4096];
            int length;
            while ((length = inputStream.read(buffer)) != -1) {
                String text = new String(buffer, 0, length, StandardCharsets.UTF_8);
                for (char ch : text.toCharArray()) {
                    if (Character.isLetter(ch)) { // 只统计字母类型字符
                        charCountMap.put(ch, charCountMap.getOrDefault(ch, 0) + 1);
                    }
                }
            }
            System.out.println(charCountMap);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的示例中,读入输入文件的内容,并转化为字符串;遍历字符串中的各个字符,统计字母类型的字符的出现次数,并将结果存储在一个HashMap中。

3. 关闭流以释放资源

在读写完数据后,需要明确地关闭对应的流以释放资源,避免内存泄漏,可以将相应的代码放在finally块中,以确保一定会被执行。

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

public class FileStreamExample {
    public static void main(String[] args) {
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        try {
            inputStream = new FileInputStream("input.txt");
            outputStream = new FileOutputStream("output.txt");

            int c;
            while ((c = inputStream.read()) != -1) { // 读取输入文件中的数据
                outputStream.write(c); // 将数据写入到输出文件中
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close(); // 关闭输入流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (outputStream != null) {
                    outputStream.close(); // 关闭输出流
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

上面的示例中,在try块中初始化输入、输出流,并进行处理操作,finally块中关闭流以释放资源。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java操作IO对象流进行数据的读写 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java中Maven项目导出jar包配置的示例代码

    下面将详细讲解“Java中Maven项目导出jar包配置的示例代码”的完整攻略。 配置pom.xml文件 首先打开项目中的pom.xml文件,确保其中包含以下内容: <!– 配置打包信息,默认为jar –> <packaging>jar</packaging> <!– 配置依赖信息 –> <dep…

    Java 2023年5月20日
    00
  • 微信小程序以ssm做后台开发的实现示例

    下面我将详细讲解如何使用ssm框架进行微信小程序后台开发的实现示例。 一、什么是SSM框架 SSM框架实际上是Spring、SpringMVC和MyBatis三个框架的结合,可以高效稳定地进行Java Web开发。其中,Spring是用于控制Bean的,SpringMVC是用于控制请求的,MyBatis是用于控制数据的。部署方便,使用简单,很适合中小型互联网…

    Java 2023年5月23日
    00
  • Spring Boot处理全局统一异常的两种方法与区别

    下面我将详细讲解Spring Boot处理全局统一异常的两种方法与区别。 1. 方法一:使用@ControllerAdvice注解 1.1 @ControllerAdvice注解的作用 @ControllerAdvice注解用于定义全局异常处理方法,可以在单个类中定义多个异常处理方法,且可以分不同的异常类进行处理。 1.2 具体实现步骤 创建一个全局异常处理…

    Java 2023年5月27日
    00
  • spring Boot打包部署到远程服务器的tomcat中

    下面我将为你介绍如何实现“spring Boot打包部署到远程服务器的tomcat中”的完整攻略,具体步骤如下: 步骤一:编写Spring Boot应用 首先需要编写一个Spring Boot应用,可以使用Spring Initializr工具来快速生成一个模板。 代码示例: @SpringBootApplication public class DemoA…

    Java 2023年5月19日
    00
  • Spark SQL配置及使用教程

    Spark SQL配置及使用教程 什么是Spark SQL? Spark SQL是运行在Apache Spark之上的模块,它提供结构化数据处理的能力,可以让用户使用SQL语句或DataFrame API处理结构化数据,同时可以与其他Spark模块集成使用。 Spark SQL的配置 1. 坐标依赖配置 <dependency> <grou…

    Java 2023年6月2日
    00
  • 浅析Java的Spring框架中IOC容器容器的应用

    浅析Java的Spring框架中IOC容器容器的应用 什么是IOC容器 IoC(Inversion of Control),即控制反转,是一种设计思想,一种面向对象编程中的思想,其主要的思想是将原本需要自己创建对象的控制权交给Spring容器,由容器来统一管理和创建对象。IoC容器是Spring框架的核心,它管理着应用程序中的所有对象。 IoC容器的应用 I…

    Java 2023年5月19日
    00
  • Layui 后台加载菜单栏名称以及url的例子

    为了在后台管理系统中实现菜单栏的功能,我们可以使用Layui框架提供的菜单组件lay-menu。它可以实现树型和直线型两种菜单,并且可以通过数据接口来动态加载菜单项。 首先,在HTML页面中创建一个页面主体,包含一个id为menuDemo的元素,用于渲染菜单: <body class="layui-layout-body"> …

    Java 2023年6月15日
    00
  • MyBatis-Spring配置的讲解

    MyBatis-Spring配置的讲解 MyBatis-Spring是MyBatis官方提供的基于Spring框架的集成方案,可以很方便地将MyBatis集成到Spring中,并且可以利用Spring框架的优势,如Spring的事务管理机制等。下面将详细讲解MyBatis-Spring的配置过程。 第一步:添加依赖 首先需要在项目的Maven配置文件中添加以…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部