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构造方法有什么作用?

    Java中的构造方法是一个特殊的方法,它与类的名称相同,且没有返回类型。它主要用于在创建对象时对对象进行初始化操作,也可以用于为一个类的成员变量赋值。构造方法的作用可以总结为以下两点: 1. 对象的初始化 构造方法在创建对象时被调用,用于对对象进行初始化。在Java中,通过关键字new来创建对象时,其实就是创建了这个类的一个实例,同时也创建了一个隐式的构造方…

    Java 2023年5月26日
    00
  • 两种java实现二分查找的方式

    下面是详细讲解“两种java实现二分查找的方式”的攻略。 一、二分查找基本算法 二分查找算法的基本思想是:在一个有序数组中,查找一个元素,先找到数组的中间元素,然后将要查找的元素和中间元素进行比较,如果相等则直接返回中间元素,如果大于则在中间元素的右半部分继续查找,如果小于则在中间元素的左半部分继续查找,如此循环直到找到要查找的元素或者找不到为止。 Java…

    Java 2023年5月19日
    00
  • Java 线程池全面总结与详解

    Java 线程池是一种常用的多线程管理方式。它通过预先创建一组线程池,可以在执行任务时复用这些线程,从而减少线程创建和销毁所带来的开销,提高并发性能。下面是Java线程池的完整攻略: 一、Java 线程池的基本概念 线程池的核心思想是将任务和线程分离,将任务提交给线程池处理。在Java中,可以使用 java.util.concurrent 包下的 Threa…

    Java 2023年5月18日
    00
  • java jdbc连接mysql数据库实现增删改查操作

    Java JDBC连接MySQL数据库实现增删改查操作 简介 Java中的JDBC(Java Database Connectivity)是Java语言操作数据库的通用API,能够与各种关系型数据库进行交互。MySQL是一种流行的关系型数据库,在Java中使用JDBC连接MySQL数据库进行增删改查操作既方便又常用。 步骤 1. 准备工作 在使用JDBC连接…

    Java 2023年5月19日
    00
  • Java文件选择对话框JFileChooser使用详解

    Java文件选择对话框JFileChooser使用详解 JFileChooser Java 文件选择对话框 (JFileChooser) 是 Java Swing 组件库中的一部分。它允许用户选择文件或目录,是一种常用的用户界面组件。 JFileChooser 核心属性 下面是 JFileChooser 的一些核心属性: currentDirectory: …

    Java 2023年5月20日
    00
  • Java实现的权重算法(按权重展现广告)

    Java实现的权重算法(按权重展现广告) 什么是按权重展现广告算法? 按权重展现广告算法是一种广告广泛应用的算法,主要用来按照指定的权重展现广告,以达到给高权重的广告更多展示的目的。简而言之,权重越高的广告展示的概率就越大。 如何实现按权重展现广告算法? 在Java中,我们可以使用以下三种方式实现按权重展现广告算法: 1. 使用Random类的nextInt…

    Java 2023年5月19日
    00
  • Python 实现一个颜色色值转换的小工具

    下面是详细的攻略: 1. 所需工具和材料 Python编程环境,比如Anaconda、PyCharm等 colorsys模块(Python标准库中已经包含) 学习Python基础知识 2. 实现思路 使用colorsys模块可以将RGB颜色值转换为HSV和HSL颜色值。具体实现思路如下: 接收输入的RGB颜色值,并将它们转换为0到1之间的数值。 使用colo…

    Java 2023年5月26日
    00
  • SpringBoot集成quartz实现定时任务详解

    SpringBoot集成Quartz实现定时任务详解 1. 什么是Quartz Quartz是一个开源的作业调度框架,其主要用于定时调度任务。它能够完成复杂的调度需求,如在指定时间执行任务、每天执行任务、周末执行任务等。 2. SpringBoot集成Quartz 2.1 引入依赖 我们首先需要在pom.xml文件中引入quartz和spring-boot-…

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