JAVA读取文件里面部分汉字内容乱码

本文介绍了使用JAVA读取包含汉字的TXT文件时常见的乱码问题,并提供了两种不同的读取方法。一种是错误的字节读取方式,这种方式可能导致汉字被截断而出现乱码;另一种是正确的字符读取方式,通过BufferedReader确保了汉字能够完整地被读取。

JAVA读取文件里面部分汉字内容乱码

读取一个txt文件,到代码中打印出来,发票有部分汉字的内容是乱码的。我开始的方式是这样的, 如下,这是完全错误的,汉字是两个字节的,如果每次读固定个字节,可能会把汉字截断。就会出现部分乱码的情况。

package susq.path;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @author susq
 * @since 2018-05-18-19:28
 */
public class WrongMethodReadTxt {
    public static void main(String[] args) throws IOException {
        ClassLoader classLoader = WrongMethodReadTxt.class.getClassLoader();
        String filePath = classLoader.getResource("").getPath() + "/expect1.txt";

        System.out.println(filePath);

        File file = new File(filePath);
        try (FileInputStream in = new FileInputStream(file)) {
            byte[] bytes = new byte[1024];
            StringBuffer sb = new StringBuffer();
            int len;
            while ((len = in.read(bytes)) != -1) {
                sb.append(new String(bytes, 0, len));
            }
            System.out.println(sb.toString());
        }
    }
}

如果存在汉字,就要按字符的方式读取:

package susq.path;

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

/**
 * @author susq
 * @since 2018-05-18-17:39
 */
public class SysPath {
    public static void main(String[] args) throws IOException {
        ClassLoader classLoader = SysPath.class.getClassLoader();
        String filePath = classLoader.getResource("").getPath() + "/expect1.txt";

        System.out.println(filePath);

        File file = new File(filePath);
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            StringBuffer sb = new StringBuffer();
            while (br.ready()) {
                sb.append(br.readLine());
            }
            System.out.println(sb);
        }
    }
}

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值