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

news2024/10/7 8:28:54

文章目录

  • 🍔需求
    • 🎄思路
    • ⭐代码
    • ⭐效果
    • 🛸注意

在这里插入图片描述在 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)方法可以用来读取字符数组数据,并将读取的字符存储到指定的字符数组中。

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper快速入门五:用zookeeper实现服务注册与发现中心

系列: zookeeper快速入门一:zookeeper安装与启动-CSDN博客 zookeeper快速入门二:zookeeper基本概念-CSDN博客 zookeeper快速入门三:zookeeper的基本操作 zookeeper快速入门四:在java客户端中操作zookeeper-CSDN博客…

Tomcat Seeion 集群

部署:nginx服务器:11-11;tomcat1:11-3; tomcat2:11-6 nginx服务器11-11做搭建: [rootmcb-11 ~]# systemctl stop firewalld [rootmcb-11 ~]# setenforce 0 [rootmcb-11 ~]# yum install epel-release.noarch -y [rootmcb…

数据结构试卷第九套

1.时间复杂度 2.树,森林,二叉树的转换 2.1树转二叉树 给所有的兄弟节点之间加一条连线;去线,只保留当前根节点与第一个叶子节点的连线,删除它与其他节点之间的连线;然后根据左孩子右兄弟进行调整&#xf…

gitlab cicd问题整理

1、docker设置数据目录: 原数据目录磁盘空间不足,需要更换目录: /etc/docker/daemon.json //写入/etc/docker/daemon.json {"data-root": "/data/docker" } 2、Dockerfile中ADD指令不生效 因为要ADD的文件被.docker…

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行自然语言处理(NLP):NLTK与Spacy的比较 自…

[数据集][目标检测]焊接件表面缺陷检测数据集VOC+YOLO格式2292张10类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2292 标注数量(xml文件个数):2292 标注数量(txt文件个数):2292 标注…

【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— 弹窗组件

简介 弹窗是移动应用中常见的一种用户界面元素,常用于显示一些重要的信息、提示用户进行操作或收集用户输入。ArkTS提供了多种内置的弹窗供开发者使用,除此之外还支持自定义弹窗,来满足各种不同的需求。 下面是所有涉及到的弹窗组件官方文档…

NSSCTF 403,444,2145,3845,404,445

[SWPUCTF 2021 新生赛]简简单单的逻辑 py文件,使用pycharm打开进行分析 其中,hex()[2:]:将十进制转化为十六进制 zfill(2):位数不足2,前补0 这里即将flag的ASCII码与key进行异或,再将每位转化为十六进制…

Prism的发布和订阅

首先需要设置一个发布和订阅的类 -- 这里发布和订阅的消息是string类型所以就只用PubSubEvent类 发布部分(构造函数注入,发布个“Hello”) 订阅部分: public partial class ViewC : UserControl {private readonly IEventAggrega…

文件的基础

一、文件 什么是文件 文件流: 一、1、文件的相关操作 创建文件的三种方式: public class FileCreate {public static void main(String[] args) {}//方式1 new File(String pathname)Testpublic void create01() {String filePath "e:\\news1.…

1987-2022年各省专利申请授权数据(8个指标))

1987-2022年各省专利申请授权数据(8个指标)) 1、时间:1987-2023年 2、指标:国内专利申请受理量(项)、国内发明专利申请受理量(项)、国内实用新型专利申请受理量(项)、国内外观设计专利申请受理量(项)、国内专利申请授…

机器学习(26)回顾gan+文献阅读

文章目录 摘要Abstract一、李宏毅机器学习——GAN1. Introduce1.1 Network as Generator1.2 Why distribution 2. Generative Adversarial Network2.1 Unconditional generation2.2 Basic idea of GAN 二、文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文…

JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦

1 Vue 1.1 Vue介绍 VUE是前端框架&#xff0c;基于MVVM&#xff0c;实现数据双向绑定 框架是半基础软件&#xff0c;可重用的代码模型 1.2 Vue指令 <script src"js/vue.js"></script></head> <body><div id"id"><!--…

使用 VS Code + Github 搭建个人博客

搭建个人博客的方案 现在&#xff0c;搭建个人博客的方式有很多&#xff0c;门槛也很低。 可以选择已有平台&#xff1a; 掘金语雀知乎简书博客园SegmentFault… 也可以选择一些主流的博客框架&#xff0c;自行搭建。 HexoGitBookVuePressdumi… 如何选择&#xff1f; 我…

es索引操作命令

索引操作 index 创建索引 put 方法创建索引 使用 put 创建索引时必须指明文档id&#xff0c;否则报错 # PUT 创建命令 # test1 索引名称 # type1 类型名称&#xff0c;默认为_doc&#xff0c;已经被废弃 # 1 文档id PUT /test1/type1/1 {"name":"zhangsan&…

【C语言】内存函数~

一、前言 上期我们讲解了与字符相关的函数&#xff1a;其中就有strcmp()字符串比较函数&#xff1b;strcpy()字符串拷贝函数&#xff1b;他们都能对内存进行一定的操作&#xff0c;可是却无法处理一些非字符串的数据。而这里我将介绍这四个函数&#xff1a;分别是memcpy()&…

Ubuntu 16.04 设置 root 密码

Ubuntu 16.04 设置 root 密码 1. sudo2. parserReferences 1. sudo sudo (/ˈsuːduː/ or /ˈsuːdoʊ/) is a program for Unix-like computer operating systems that allows users to run programs with the security privileges of another user, by default the superus…

Linux下进程的调度与切换

&#x1f30e;进程的调度与切换 文章目录&#xff1a; 进程的调度与切换 进程切换 进程调度       活动状态进程队列       位图判断       过期队列 总结 前言&#xff1a; 在Linux操作系统中&#xff0c;进程的调度与切换是操作系统核心功能之一&#xff…

ViT如何支持变长序列(patches)输入?

问题&#xff1a;当增加输入图像的分辨率时&#xff0c;例如DeiT 从 224 到 384&#xff0c;一般来说会保持 patch size&#xff08;例如9&#xff09;&#xff0c;因此 patch 的数量 N 会发生了变化。那么视觉transformer是如何处理变长序列输入的? 回答&#xff1a; 在讨论…

鸿蒙开发学习:【驱动子系统】

OpenHarmony驱动子系统采用C面向对象编程模型构建&#xff0c;通过平台解耦、内核解耦&#xff0c;兼容不同内核&#xff0c;提供了归一化的驱动平台底座&#xff0c;旨在为开发者提供更精准、更高效的开发环境&#xff0c;力求做到一次开发&#xff0c;多系统部署。 为了缩减…