JAVA |日常开发中读写TXT文本详解

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

JAVA |日常开发中读写TXT文本详解

  • 前言
  • 一、读取 TXT 文本
    • 1.1 使用BufferedReader读取
    • 1.2 使用Scanner读取
  • 二、写入 TXT 文本
    • 2.1 使用BufferedWriter写入
    • 2.2 使用PrintWriter写入
    • 2.3 字节流写入(FileOutputStream)后转换为字符流(适用于特殊编码写入等情况)
  • 三、注意事项
    • 3.1 文件路径问题
    • 3.2 编码问题
    • 3.3 资源释放问题
  • 结束语
  • 优质源码分享

JAVA |日常开发中读写TXT文本详解,在日常的Java开发中,读写TXT文本文件是一个常见的操作。无论是在处理日志、配置文件,还是进行简单的数据存储,掌握如何读写文本文件是非常重要的技能。本文将详细介绍如何在Java中进行TXT文本的读写操作,并提供一些实用的代码示例。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

一、读取 TXT 文本

1.1 使用BufferedReader读取

  • 原理:BufferedReader是 Java 中用于高效读取字符流的类。它可以从一个字符输入流(如FileReader)读取文本,并提供缓冲功能,减少对底层资源的频繁访问,提高读取效率。

步骤示例:

1.首先,需要导入相关的包java.io.BufferedReader和java.io.FileReader。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

2.然后,使用try - catch块来处理可能出现的IOException。在try块中,创建FileReader对象来关联要读取的文本文件,再将其传递给BufferedReader对象。

public class ReadTxtFile {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine())!= null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    在上述代码中,reader.readLine()方法用于逐行读取文本内容,当读取到文件末尾时返回null。这样就可以通过循环将文件内容逐行打印出来。最后,要记得关闭BufferedReader,释放资源。

1.2 使用Scanner读取

    原理:Scanner类提供了一种简单的方式来解析各种基本数据类型和字符串。当用于读取文本文件时,它可以根据指定的分隔符(默认是空格)来解析文本内容。

步骤示例:

导入java.util.Scanner和java.io.File包。

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

    同样在try - catch块中进行操作。创建Scanner对象,将通过File对象打开的文本文件作为参数传递给它。

public class ReadTxtFileWithScanner {
    public static void main(String[] args) {
        try {
            Scanner scanner = new Scanner(new File("example.txt"));
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

    这里scanner.hasNextLine()用于判断是否还有下一行内容,scanner.nextLine()用于读取下一行内容并返回。最后关闭Scanner对象。
    字节流读取(FileInputStream)后转换为字符流(适用于读取非文本编码可能有问题的情况)
    原理:FileInputStream用于以字节流的方式读取文件内容。如果要将字节流转换为字符流来处理文本内容,可以将其包装在InputStreamReader中,再使用BufferedReader进行缓冲读取,这样可以处理一些特殊编码的文本文件。

步骤示例:

导入java.io.FileInputStream、java.io.InputStreamReader和java.io.BufferedReader包。

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

    在try - catch块中,首先创建FileInputStream对象,然后将其传递给InputStreamReader,再传递给BufferedReader进行读取。

public class ReadTxtFileWithByteStream {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("example.txt");
            InputStreamReader isr = new InputStreamReader(fis, "UTF - 8");
            BufferedReader reader = new BufferedReader(isr);
            String line;
            while ((line = reader.readLine())!= null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    在上述代码中,InputStreamReader构造函数中的第二个参数指定了文件的编码方式(这里是UTF - 8),可以根据实际情况进行修改。

二、写入 TXT 文本

2.1 使用BufferedWriter写入

    原理:BufferedWriter是用于将文本写入字符输出流的类,它提供缓冲功能,减少物理写入操作的次数,提高写入效率。
步骤示例:
导入java.io.BufferedWriter和java.io.FileWriter包。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

    在try - catch块中,创建FileWriter对象来关联要写入的文本文件,再将其传递给BufferedWriter对象。使用write方法写入内容,最后通过flush方法将缓冲区内容写入文件,并关闭BufferedWriter。

public class WriteTxtFile {
    public static void main(String[] args) {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
            writer.write("这是要写入文本文件的内容");
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.2 使用PrintWriter写入

    原理:PrintWriter提供了方便的打印方法来写入各种数据类型(如整数、浮点数、字符串等)到文本输出流。它可以自动将数据转换为字符串并写入文件。

步骤示例:

导入java.io.PrintWriter和java.io.File包。

import java.io.PrintWriter;
import java.io.File;
import java.io.FileNotFoundException;

    在try - catch块中,创建PrintWriter对象,将通过File对象打开的文本文件作为参数传递给它。使用println或print方法写入内容,最后关闭PrintWriter。

public class WriteTxtFileWithPrintWriter {
    public static void main(String[] args) {
        try {
            PrintWriter writer = new PrintWriter(new File("output.txt"));
            writer.println("这是第一行内容");
            writer.print("这是第二行内容");
            writer.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

2.3 字节流写入(FileOutputStream)后转换为字符流(适用于特殊编码写入等情况)

    原理:FileOutputStream用于以字节流的方式将数据写入文件。如果要将字节流转换为字符流来写入文本内容,可以将其包装在OutputStreamReader中,再使用BufferedWriter进行缓冲写入,这种方式在处理特殊编码文件写入时比较有用。

步骤示例:

导入java.io.FileOutputStream、java.io.OutputStreamReader和java.io.BufferedWriter包。

import java.io.FileOutputStream;
import java.io.OutputStreamReader;
import java.io.BufferedWriter;
import java.io.IOException;

    在try - catch块中,首先创建FileOutputStream对象,然后将其传递给OutputStreamReader,再传递给BufferedWriter进行写入。

public class WriteTxtFileWithByteStream {
    public static void main(String[] args) {
        try {
            FileOutputStream fos = new FileOutputStream("output.txt");
            OutputStreamReader osw = new OutputStreamReader(fos, "UTF - 8");
            BufferedWriter writer = new BufferedWriter(osw);
            writer.write("这是要写入的内容");
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    同样,OutputStreamReader构造函数中的第二个参数指定了文件的编码方式。

三、注意事项

3.1 文件路径问题

    读取和写入文件时,文件路径是一个关键因素。相对路径是相对于当前工作目录而言的。在 Java 中,可以通过System.getProperty(“user.dir”)获取当前工作目录。如果文件位于项目的特定目录下,要确保路径的正确性。
    例如,如果example.txt文件位于项目的resources目录下,在 Eclipse 等 IDE 中,相对路径可能需要根据项目的结构进行调整,可能是src/main/resources/example.txt等。

3.2 编码问题

    文本文件有多种编码方式,如 UTF - 8、GBK 等。在读取和写入时,要确保编码方式的一致性。如果编码方式不一致,可能会导致乱码问题。
例如,在读取一个使用 UTF - 8 编码的文件时,应该使用InputStreamReader或BufferedReader并指定 UTF - 8 编码来正确读取内容。同样,在写入文件时,也要根据需要选择合适的编码方式。

3.3 资源释放问题

    无论是读取还是写入文件,都要及时关闭打开的流(如BufferedReader、BufferedWriter等),以释放系统资源。如果不关闭流,可能会导致资源泄漏,特别是在频繁读取或写入文件的情况下。
    可以使用try - with - resources语句来自动关闭资源,从 Java 7 开始支持这种方式。例如,在读取文件时:

try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
    String line;
    while ((line = reader.readLine())!= null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

    在try - with - resources语句中,当代码块执行结束后,会自动调用资源的close方法,这样可以更加方便和安全地管理资源。

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------
 

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144189040(防止抄袭,原文地址不可删除)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

clion解决默认编译器乱码问题

解决乱码问题 如图所示当我们在clion下开发时如果输入中文,会有乱码出现。 问题的产生 clion默认的C/C编译器(MinGW)对中文的解析有问题出现乱码。 解决方案 修改文件的编码方式 进入clion的Settings(设置)–>Editor(编辑) —>Fil…

pset2 substitution.c

1.extension:To Do Tasks 推荐一个vscode里面一个很好用的插件!!!写出解决的步骤,不但理清楚思路。还可以提高效率!特别是针对一些文本比较长的pset,要求多且零碎,反复切换页面&…

程序员需要具备哪些知识?

程序员需要掌握的知识广泛而深厚,这主要取决于具体从事的领域和技术方向。不过,有些核心知识是共通的,就像建房子的地基一样,下面来讲讲这些关键领域: 1. 编程语言: 无论你是搞前端、后端、移动开发还是嵌…

解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾

在数字化时代,开源已成为推动技术创新和知识共享的核心力量,尤其在数据领域,开源技术的涌现不仅促进了行业的快速发展,也让更多的开发者和技术爱好者得以参与其中。随着物联网、工业互联网等技术的广泛应用,时序数据库…

云计算vsphere 服务器上添加主机配置

这里是esxi 主机 先把主机打开 然后 先开启dns 再开启 vcenter 把每台设备桌面再vmware workstation 上显示 同上也是一样 ,因为在esxi 主机的界面可能有些东西不好操作 我们选择主机和集群 左边显示172.16.100.200

Kotlin报错:lateinit property xxx has not been initialized

Kotlin报错:lateinit property xxx has not been initialized 发生在定义了一个名为xxx的lateinit变量。 解决,在调用前,可以先判断一层该xxx变量是否已经初始化: if (this::xxx.isInitialized) {//正常使用该变量} kotlin.Unini…

【ArcGIS微课1000例】0134:ArcGIS Earth实现二维建筑物的三维完美显示

文章目录 一、加载数据二、三维显示三、三维符号化一、加载数据 加载配套实验数据(0134.rar中的建筑物,2d或3d都可以),方法如下:点击添加按钮。 点击【Add Files】,在弹出的Open对话框中,选择建筑物,点击确定,完成添加。 默认二维显示: 二、三维显示 右键建筑物图层…

【Linux系统编程】——理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构硬件当代计算机是性价比的产物冯诺依曼的存储冯诺依曼的数据流动步骤冯诺依曼结构总结 冯诺依曼体系结构硬件 下面是整个冯诺依曼体系结构 冯诺依曼结构(Von Neumann Architecture)是现代计算机的基本结构之一,由数…

H3C OSPF实验

实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF ,实现全网互通为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […

【工具变量】上市公司企业所在地城市等级直辖市、副省级城市、省会城市 计划单列市(2005-2022年)

一、包含指标: 股票代码 股票代码 股票简称 年份 所属城市 直辖市:企业所在地是否属于直辖市。1是,0否。 副省级城市:企业所在地是否属于副省级城市。1是,0否。 省会城市&a…

Android Studio历史版本下载

Android Studio 下载文件归档 | Android Developers 一定要选择英文环境, 拉到最后,同意

纯粹直播 1.7.7 |手机版和TV版,聚合六大直播平台,原画播放

纯粹直播是一款开源的应用程序,支持兴趣化主题的游戏直播、户外直播和才艺直播节目。目前可以观看斗鱼、B站、虎牙和抖音等六大直播平台的内容。该应用适配了安卓手机和电视盒子平台使用,并且软件无广告,提供原画质播放体验。 大小&#xff…

【Docker】针对开发环境、测试环境、生产环境如何编排?

目录 一、引言 二、Docker Compose 文件基础 三、针对不同环境的 Docker 编排 开发环境 测试环境 生产环境 四、配置文件全局变量的编写 五、总结 一、引言 在软件开发和部署的过程中,不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术&…

rabbitmq 安装延时队列插件rabbitmq_delayer_message_exchange(linux centOS 7)

1.插件版本 插件地址:Community Plugins | RabbitMQ rabbitmq插件需要对应的版本,根据插件地址找到插件 rabbitmq_delayer_message_exchange 点击Releases 因为我rabbitmq客户端显示的版本是: 所以我选择插件版本是: 下载 .ez文…

同道猎聘Q3营收降利润增,AI或成估值重塑关键词

2024年,经济向好的趋势没有改变,挑战却仍然存在。企业纷纷进行结构性变革优化或业务方向调整。这一点反映到人才市场,绝大多数企业对招聘扩张持保守态度,降本增效的主题仍在延续。 作为人才市场水温变化的“温度计”,…

UPLOAD LABS | PASS 10 - 黑名单绕过(Windows . 绕过 - 变体)

关注这个靶场的其它相关笔记:UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 本关的目标是上传一个 WebShell 到目标服务器上,并成功访问: 通过查看源码,可以发现,本关在之前所有关卡的基础上做了…

【iOS】多线程基础

【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解,导致了项目中网络请求哪…

【0x3D】HCI_Remote_Host_Supported_Features_Notification事件详解

目录 一、事件概述 二、事件格式及参数说明 2.1. HCI_Remote_Host_Supported_Features_Notification事件格式 2.2. BD_ADDR 2.3. Remote_Host_Supported_Features 三、事件作用 3.1. 设备特性沟通与理解 3.2. 功能协商与性能优化 3.3. 设备管理与配置更新 四、应用场…

等差数列末项计算

等差数列末项计算 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出一个等差数列的前两项a1,a2,求第n项是多少。 输入 一行,包含三个整数a1,a2&#x…

优先算法 —— 滑动窗口系列 - 无重复字符的最长子串

目录 前言 1. 无重复字符的最长子串 2. 题目解析 3. 算法原理 解法1:暴力枚举 哈希表(判断字符是否有重复出现) 解法2:滑动窗口 4. 代码 前言 当我们发现暴力解法两个指针都不回退,都是向同一个方向移动的时候我…