最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用FileReader.read()讀取文件時亂碼的兩個解決方案

 更新時間:2026年01月23日 09:18:17   作者:裊沫  
文章主要討論了在Java中使用FileReader讀取文件時可能出現(xiàn)的亂碼問題,并提出了通過指定文件編碼格式和使用int類型接收讀取到的字節(jié)來解決亂碼的方法

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);
            //循環(huán)讀取 使用read
            while (fileReader.read()!=-1){
                System.out.print((char) fileReader.read());//默認輸出的是int,因此需要轉(zhuǎn)化為char
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileReader != null) {
                    fileReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 以上代碼是有可能出現(xiàn)代碼輸出混亂的情況的,輸出效果如下:

可能會出現(xiàn)亂碼的問題

原因可能是文件編碼與程序讀取時使用的編碼不一致。

在創(chuàng)建FileReader對象時,沒有指定文件的編碼格式,因此默認使用的是系統(tǒng)默認的編碼格式。

如果文件中包含非系統(tǒng)默認編碼格式的字符,那么在讀取時就會出現(xiàn)亂碼。

解決過程

為了解決這個問題,可以在創(chuàng)建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);
        //循環(huán)讀取 使用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();
        }
    }
}

上面這種方法,按理說也可以,但是我使用后發(fā)現(xiàn)報錯了,不能調(diào)用UTF-8,感興趣的小伙伴,自行嘗試 ~

在Java中,FileReader.read()方法返回的是讀取到的字節(jié)(int類型),而不是字符(char類型)。因此,需要使用強制類型轉(zhuǎn)換將其轉(zhuǎn)換為字符。

 我們需要使用int類型的date來,接受fileReader.read(),當接受的數(shù)據(jù)不為空時,一直循環(huán)下去,直到接受到最后一個字符,然后每接受一個數(shù)據(jù),就強制轉(zhuǎn)換成 char 打印到控制臺,就不會出現(xiàn)亂碼的情況了

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);
            //循環(huán)讀取 使用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();
            }
        }
    }
}

 控制臺打印輸出:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中@PropertySource的使用方法和運行原理詳解

    Spring中@PropertySource的使用方法和運行原理詳解

    這篇文章主要介紹了Spring中@PropertySource的使用方法和運行原理詳解,PropertySource注解可以方便和靈活的向Spring的環(huán)境容器(org.springframework.core.env.Environment?Environment)中注入一些屬性,這些屬性可以在Bean中使用,需要的朋友可以參考下
    2023-11-11
  • Java實現(xiàn)的進制轉(zhuǎn)換工具類完整示例

    Java實現(xiàn)的進制轉(zhuǎn)換工具類完整示例

    這篇文章主要介紹了Java實現(xiàn)的進制轉(zhuǎn)換工具類,結(jié)合完整實例形式分析了Java實現(xiàn)二進制、十六進制、字符串、數(shù)組等相關(guān)轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2018-07-07
  • Springboot使用切面功能詳解

    Springboot使用切面功能詳解

    Spring?Boot?是一個基于Spring框架的項目,它簡化了基于Spring的應(yīng)用開發(fā),這篇文章主要介紹了?Spring?Boot?中的切面功能,需要的可以了解下
    2025-01-01
  • Spring?Framework六種常見設(shè)計模式

    Spring?Framework六種常見設(shè)計模式

    設(shè)計模式是軟件開發(fā)的重要組成部分,本文借助spring來講解這個框架的設(shè)計模式,通過本文我們探討了spring如何利用這些模式來提供這些豐富的功能,對本文感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • JavaWeb中上傳和下載文件實例代碼

    JavaWeb中上傳和下載文件實例代碼

    這篇文章主要介紹了JavaWeb中上傳和下載文件實例代碼,需要的朋友可以參考下
    2017-06-06
  • Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計

    Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計

    為了解決 本地調(diào)試 的問題,本文實現(xiàn)了一種簡單實用的策略,可以通過 Nacos 動態(tài)配置服務(wù)路由,還可以基于用戶,部門,組織等級別配置服務(wù)路由,實現(xiàn) 本地調(diào)試 的同時,實際上也實現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • JAVA中哈希表HashMap的深入學習

    JAVA中哈希表HashMap的深入學習

    這篇文章主要介紹了哈希表HashMap的深入學習,哈希表是一種非常重要的數(shù)據(jù)結(jié)構(gòu),許多緩存技術(shù)(比如memcached)的核心其實就是在內(nèi)存中維護一張大的哈希表,本文會對java集合框架中HashMap的實現(xiàn)原理進行講解。感興趣的話可以一起來學習
    2020-07-07
  • 解決Unable to start embedded container SpringBoot啟動報錯問題

    解決Unable to start embedded container&nbs

    這篇文章主要介紹了解決Unable to start embedded container SpringBoot啟動報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java實現(xiàn)24點游戲

    java實現(xiàn)24點游戲

    每次取出4張牌,使用加減乘除,第一個能得出24者為贏,這篇文章主要就為大家詳細介紹了java實現(xiàn)24點游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制)

    Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制)

    這篇文章主要介紹了Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

巴东县| 来安县| 措美县| 长沙市| 怀安县| 大余县| 潞城市| 诏安县| 即墨市| 德江县| 鄯善县| 广东省| 桃源县| 都匀市| 舟山市| 姜堰市| 揭东县| 万载县| 广安市| 静宁县| 莱西市| 广饶县| 洛宁县| 泊头市| 莱西市| 漳平市| 叶城县| 河池市| 莱西市| 措美县| 长乐市| 新野县| 咸阳市| 兴山县| 调兵山市| 南靖县| 保定市| 梅河口市| 东光县| 延庆县| 浙江省|