在Java中使用FileReader.read()进行读取文件时,为什么乱码?两个方法解决

这篇具有很好参考价值的文章主要介绍了在Java中使用FileReader.read()进行读取文件时,为什么乱码?两个方法解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

public class FileReader_ {
    public static void main(String[] args) {
    }

    @Test
    public void m1() {
        String filePath = "e:\\hello.txt";
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(filePath);
            //循环读取 使用read
            while (fileReader.read()!=-1){
                System.out.print((char) fileReader.read());//默认输出的是int,因此需要转化为char
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 以上代码是有可能出现代码输出混乱的情况的,输出效果如下:

java fileread中文乱码,韩顺平java习题,java,开发语言

可能会出现乱码的问题:

原因可能是文件编码与程序读取时使用的编码不一致。在创建FileReader对象时,没有指定文件的编码格式,因此默认使用的是系统默认的编码格式。如果文件中包含非系统默认编码格式的字符,那么在读取时就会出现乱码。

为了解决这个问题,可以在创建FileReader对象时指定文件的编码格式。例如,如果文件是使用UTF-8编码的,可以这样修改代码:

public void m1() {
    String filePath = "e:\\hello.txt";
    FileReader fileReader = null;
    int data = 0;
    try {
        // 指定字符编码为UTF-8
        fileReader = new FileReader(filePath, StandardCharsets.UTF_8);
        //循环读取 使用read
        while ((data=fileReader.read())!=-1){
            System.out.print((char) data); // 修改这里
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fileReader != null) {
                fileReader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面这种方法,按理说也可以,但是我使用后发现报错了,不能调用UTF-8,感兴趣的小伙伴,自行尝试 ~

在Java中,FileReader.read()方法返回的是读取到的字节(int类型),而不是字符(char类型)。因此,需要使用强制类型转换将其转换为字符。

 我们需要使用int类型的date来,接受fileReader.read(),当接受的数据不为空时,一直循环下去,直到接受到最后一个字符,然后每接受一个数据,就强制转换成 char 打印到控制台,就不会出现乱码的情况了

public class FileReader02_ {
    public static void main(String[] args) {

    }
    @Test
    public void m1() {

        String filePath = "e:\\hello.txt";
        FileReader fileReader = null;
        int date=0;
        try {
            fileReader = new FileReader(filePath);
            //循环读取 使用read
            while ((date=fileReader.read())!=-1){
                System.out.print((char) date);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 控制台打印输出:

java fileread中文乱码,韩顺平java习题,java,开发语言文章来源地址https://www.toymoban.com/news/detail-775561.html

到了这里,关于在Java中使用FileReader.read()进行读取文件时,为什么乱码?两个方法解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • html5提供的FileReader是一种异步文件读取文件中的数据

    前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前,先简单介绍input的file类型。 input type=\\\"file\\\" id=\\\"file\\\" input的file类型会渲染为一个按钮和一段文字。点击按钮可打开文件选择窗口,文字表示对文件的描述(大部分情

    2024年02月11日
    浏览(11)
  • Python 3 使用 read()、readline()、readlines() 函数 读取文件

    样例文件 example.txt,编码格式为 \\\'UTF-8\\\'。 2 分别使用 read()、readline()、readlines() 函数 2.1  # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 2.2 # readline() ------- 读取第一行的内容,以字符串的形式返回结果。 2.3 # readlines() -------- 读取全部内容,以数列的格式返

    2024年01月18日
    浏览(11)
  • 【Shell 命令集合 文件管理】Linux 读取命令 read命令使用指南

    【Shell 命令集合 文件管理】Linux 读取命令 read命令使用指南

    Shell 命令专栏:Linux Shell 命令全解析 在Linux中, read 命令用于从标准输入或者文件中读取输入,并将其赋值给一个变量。它的基本语法如下: 选项可以是以下之一: -p :指定一个提示符,用于提示用户输入。 -r :取消对反斜杠的转义,保留其原始含义。 -t :设置等待用户输

    2024年02月04日
    浏览(22)
  • 【JAVA】为什么要使用封装以及如何封装

    【JAVA】为什么要使用封装以及如何封装

    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改。这是Java面向对象编程的三个基本特性之一,另外两个是继承和多态。在此之前我们已经学

    2024年02月08日
    浏览(14)
  • Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较已经为什么禁止使用double直接构造BigDecimal

    Java开发手册中为什么禁止使用BigDecimal的equals方法做等值比较已经为什么禁止使用double直接构造BigDecimal

    阿里Java开发手册嵩山版中明确指出: 1、BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法 equals()方法会比较值和精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度 2、禁止使用构造方法BigDecimal(double)的方式把double值转换为BigDecimal对象 BigDecimal(double)存在精度损

    2024年02月07日
    浏览(12)
  • Java面试题:为什么HashMap不建议使用对象作为Key?

    HashMap 是一种基于哈希表的动态数据结构,它允许使用任意不可变对象作为键(key)来存储和检索数据。然而,在某些情况下,使用对象作为 HashMap 的键可能会遇到一些问题。   首先,我们需要明确对象作为 HashMap 的键需要满足一些条件: 不可变性:对象的属性不能被修改,

    2024年04月22日
    浏览(12)
  • 为什么Tomcat的NIO在读取body时要模拟阻塞?

    文章首发地址 Tomcat的NIO完全可以以非阻塞方式处理IO,为什么在读取body部分时要模拟阻塞呢?在Tomcat的NIO读取HTTP请求时,为了保证请求的正确性和可靠性,需要模拟阻塞模式,这是因为servlet规范里定义了ServletInputStream在读数据时是阻塞模式。 ServletInputStream在读取数据时是阻

    2024年02月13日
    浏览(10)
  • 为什么要进行数据治理

            数据治理是个大话题,包含的环节也非常多,从数据集成、数据质量、数据资产、数据安全、数据标准各个环节。数据治理最近越来越受到企业的关注,为什么越来越多的企业开始进行数据治理呢?因为他们开始意识到了数据治理的价值。本质上来讲数据治理的价

    2024年02月09日
    浏览(13)
  • mac为什么不支持ntfs,mac读取ntfs移动硬盘软件有哪些

    mac为什么不支持ntfs,mac读取ntfs移动硬盘软件有哪些

    品牌型号:MacBook Pro 2020款 系统: macOS11.6.5 软件版本:Tuxera NTFS for Mac 熟悉mac电脑的用户都知道,Mac原生系统不能写入NTFS格式硬盘,但是Windows电脑可以正常使用NTFS格式硬盘,mac为什么不支持ntfs呢?实际上Mac电脑可以借助一些NTFS for Mac类的软件让Mac电脑支持读写NTFS格式硬盘,

    2024年02月04日
    浏览(10)
  • 软件为什么要进行性能压力测试?

    软件为什么要进行性能压力测试?

    软件为什么要进行性能压力测试?随着软件应用的不断增多和复杂度的提高,软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应,给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行,性能压力测试变得至关重要

    2024年02月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包