java读取文件内容

直接上代码,两个类:一个工具类,一个测试类

工具类代码:

package org.example.study.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Slf4j
public class FileUtil {

    public static List<List<String>> readFileContent(String filePath) {
        //String filePath = "D:\\test.del";
        FileInputStream fileInputStream;
        List<List<String>> dataList;

        try {
            fileInputStream = new FileInputStream(filePath);
            Reader reader = new InputStreamReader(fileInputStream, Charset.forName("UTF-8"));
            //Reader reader = new InputStreamReader(fileInputStream, Charset.forName("GBK"));
            BufferedReader bufferedReader = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
            List<String> list = new ArrayList<>();
            for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine()) {
                list.add(line);
            }
            dataList = list.stream().filter(StringUtils::isNotBlank).map(line -> Arrays.asList(line.split("~@~"))).collect(Collectors.toList());
            log.info("dataList.size()===={}", dataList.size());
            log.info("dataList===={}", dataList);
            for (List<String> stringList : dataList) {
                log.info("stringlist===={}", stringList);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return dataList;
    }
}

测试类代码:

package org.example.study.util;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

class FileUtilTest {
    public static void main(String[] args) {
        List<List<String>> list = FileUtil.readFileContent("D:\\\\test.del");
        System.out.println("list.size====" + list.size());
        System.out.println("list====" + list);
    }
}

注意事项:

值得关注的是,这儿测试类中的文件  test.del  ,这儿需要说明以下文件的编码格式。

大家看我写的文件内容:

411~@~20230613~@~工作~@~1
618~@~20230613~@~娱乐~@~3
710~@~20230613~@~购物~@~1
516~@~20230613~@~吃饭~@~3

然后保存文件的时候,默认是 ANSI 格式的,也就是相当于是 GBK,这时候测试运行程序,打印的内容中就会出现中文乱码的现象。所以,要么将程序中的 UTF-8 编码改成 GBK,将文件编码格式改成 UTF-8 。文件格式改成 UTF-8 的方法:右键文件---->打开方式---->记事本---->文件---->另存为    这时候就会看到 “保存” 按钮旁边有个 “编码”,默认是 ANSI,咱们改成 UTF-8 ,然后保存即可。如下图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值