使用三种方式读取文本文件

本文介绍了如何使用Java的简洁字符流、字符数组和BufferedReader进行文本文件内容的逐个字符、字符数组和行级拷贝,展示了从打开文件、选择读写方式到处理和关闭文件的详细过程,强调了BufferedReader在提高效率方面的优势。
摘要由CSDN通过智能技术生成


在这里插入图片描述在 Java 中,读取文件通常涉及以下几个步骤:

打开文件:首先需要创建一个文件对象,表示要读取的文件。这个文件对象可以包含文件路径、文件名等信息。

选择读取方式:在 Java 中,可以选择不同的类来实现文件的读取操作,比如 FileInputStream、BufferedReader 等。这些类提供了不同的读取方式和功能,可以根据需求选择合适的类。

读取文件内容:通过选择的读取类,可以读取文件中的内容。可以逐行读取文本文件,也可以一次性读取二进制文件等。

处理文件内容:读取文件内容后,可以对内容进行处理,比如输出到控制台、存储到变量中、进行进一步的解析等操作。

关闭文件:在读取完文件内容后,需要及时关闭文件流,释放资源,以避免资源泄露和其他问题。

总的来说,在 Java 中读取文件需要注意文件路径的设置、选择合适的读取方式、正确处理文件内容以及及时关闭文件流等方面。通过以上步骤,可以有效地实现对文件的读取操作。

🍔需求

编写程序,使用三种方式(简洁字符流一次读写一个字符、简洁字符流一次读写一个字符数组、缓冲字符流一次读写一行字符串)实现文本文件内容的拷贝。

🎄思路

当使用Java来拷贝文本文件时,可以利用字符流和缓冲字符流来进行操作。这里简单解释一下三种不同方式的思路:

  • 使用简洁字符流一次读写一个字符:
    首先创建一个FileReader来读取源文件,创建一个FileWriter来写入目标文件。
    使用一个循环来逐个读取源文件中的字符,然后逐个将其写入目标文件。
    这种方式虽然简单,但由于是逐个字符读写,可能会比较慢,特别是对于大文件。

  • 使用简洁字符流一次读写一个字符数组:
    与第一种方式类似,也是创建FileReaderFileWriter
    不过这次使用一个字符数组作为缓冲区,通过循环读取一定长度的字符数组,然后将整个数组写入目标文件。
    这种方式相比逐个字符读写更高效,因为减少了IO操作的次数。

  • 使用缓冲字符流一次读写一行字符串:
    创建BufferedReader来按行读取源文件的内容,创建BufferedWriter来按行写入目标文件。
    利用readLine()方法逐行读取源文件中的内容,并将每行内容写入目标文件。
    这种方式更高效,因为它可以一次性读取和写入整行文本,减少了IO操作的次数。

总的来说,这三种方式都是通过逐个字符、字符数组或者整行文本来进行读写操作,其中第三种方式使用了缓冲字符流,可以进一步提高效率。

⭐代码

package org.Test6;

import java.io.*;

public class copy1 {

    public static void main(String[] args) {
        String sourceFile = "F://aa.txt";
        String destinationFile = "F://bb.txt";

        // 使用简洁字符流一次读写一个字符
        copyFileUsingCharacterStreams(sourceFile, destinationFile);

        // 使用简洁字符流一次读写一个字符数组
        copyFileUsingCharacterArray(sourceFile, destinationFile);

        // 使用缓冲字符流一次读写一行字符串
        copyFileUsingBufferedReader(sourceFile, destinationFile);
    }

    private static void copyFileUsingCharacterStreams(String sourceFile, String destinationFile) {
        try (Reader reader = new FileReader(sourceFile);
             Writer writer = new FileWriter(destinationFile)) {

            int character;
            while ((character = reader.read()) != -1) {
                writer.write(character);
            }

            System.out.println("文本文件拷贝成功File copied using character streams.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void copyFileUsingCharacterArray(String sourceFile, String destinationFile) {
        try (Reader reader = new FileReader(sourceFile);
             Writer writer = new FileWriter(destinationFile)) {

            char[] buffer = new char[1024];
            int charactersRead;
            while ((charactersRead = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, charactersRead);
            }

            System.out.println("文本文件拷贝成功File copied using character array.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void copyFileUsingBufferedReader(String sourceFile, String destinationFile) {
        try (BufferedReader reader = new BufferedReader(new FileReader(sourceFile));
             BufferedWriter writer = new BufferedWriter(new FileWriter(destinationFile))) {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine();
            }

            System.out.println("文本文件拷贝成功File copied using buffered reader.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

⭐效果

在这里插入图片描述
在这里插入图片描述

🛸注意

BufferedReader是用于按行读取字符流数据的缓冲字符流,而FileReader是用于读取字符文件的简洁字符流。因此,当需要读取字符数组时,应该使用FileReader而不是BufferedReader。

BufferedReader的readLine()方法是以行为单位读取数据的,它返回的是一行文本字符串。而FileReader的read(char[] cbuf)方法可以用来读取字符数组数据,并将读取的字符存储到指定的字符数组中。

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小吉.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值