读取hdfs文件,本地文件,包括:Excel/CSV/Log...等,以及fsDataInputStream = fileSystem.open(path)中文乱码

测试文本

1234.log
在这里插入图片描述

I Love China
I love my country

沁园春

北国风光,千里冰封,万里雪飘。

望长城内外,惟余莽莽;大河上下,顿失滔滔。

山舞银蛇,原驰蜡象,欲与天公试比高。

须晴日,看红装素裹,分外妖娆。

江山如此多娇,引无数英雄竞折腰。

惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。

一代天骄,成吉思汗,只识弯弓射大雕。

俱往矣,数风流人物,还看今朝。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


    public static void main(String[] args) {
        Path path = new Path("C:\\Users\\86135\\Desktop\\1234.log");
        List<String> lis = new ArrayList<>();
        Configuration configuration = new Configuration();
        FSDataInputStream fsDataInputStream = null;
        FileSystem fileSystem = null;
        BufferedReader br = null;
        try {
            fileSystem = path.getFileSystem(configuration);
            fsDataInputStream = fileSystem.open(path);

            String str3;
            while ((str3 = fsDataInputStream.readLine()) != null) {
                System.out.println("\u001b[1;41m"+str3);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

结果1(乱码)

在这里插入图片描述

    public static void main(String[] args) {
        Path path = new Path("C:\\Users\\86135\\Desktop\\1234.log");
        List<String> lis = new ArrayList<>();
        Configuration configuration = new Configuration();
        FSDataInputStream fsDataInputStream = null;
        FileSystem fileSystem = null;
        BufferedReader br = null;
        try {
            fileSystem = path.getFileSystem(configuration);
            fsDataInputStream = fileSystem.open(path);

            /*String str3;
            while ((str3 = fsDataInputStream.readLine()) != null) {
                System.out.println("\u001b[1;41m"+str3);
            }*/
            br = new BufferedReader(new InputStreamReader(fsDataInputStream));
            String str2;
            while ((str2 = br.readLine()) != null) {
                System.out.println("\u001b[1;41m"+str2);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
//用BufferedReader包装一层,就可以解决
br = new BufferedReader(new InputStreamReader(fsDataInputStream));
结果2(正常)

在这里插入图片描述

Path path = new Path("hdfs://192.168.1.111:9000/test/1234log");
Configuration configuration = new Configuration();
FileSystem fileSystem = path.getFileSystem(configuration);
FSDataInputStream fsDataInputStream = fileSystem.open(path);

以上既可以读取本地文件,也可以读取hdfs上的文件,
亲测有效,
如果解决不了,中文读取乱码补充

~ 首先文件编码必须是utf-8的格式
~查看文件编码格式(记事本打开,点击另存为,就可以看到编码格式)
~如果是ANSI 编码格式的文件则

br = new BufferedReader(new InputStreamReader(fsDataInputStream,"GBK"));

~编码格式设置为gbk即可!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值