首页 > 其他分享 >根据不同的编码格式读取txt文件内容

根据不同的编码格式读取txt文件内容

时间:2024-04-26 15:46:38浏览次数:24  
标签:编码 code java 读取 && new 0xff import txt

参考:https://blog.csdn.net/chiwang1984/article/details/8593240

import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


@Slf4j
public class FileRead {
    public List<List<String>> readTxt(FileInputStream fis, String code) {
        List<List<String>> result = new ArrayList<>();

        InputStreamReader isr = null;
        String tmp;
        try {
            isr = new InputStreamReader(fis, code);
            BufferedReader bufferedReader = new BufferedReader(isr);
            while ((tmp = bufferedReader.readLine()) != null) {
                result.add(Collections.singletonList(tmp));
            }
        } catch (IOException e) {
            log.error("读取文件内容失败", e);
            throw new ApiException("上传文件按失败,请稍后再试!");
        } finally {
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                    log.error("读取文件内容关闭流失败", e);
                }
            }
        }
        return result;
    }

    public String getCode(FileInputStream fis) {
        String code;
        boolean flag = true;
        DataInputStream dis = null;

        try {
            //取前100个左右字节进行判断
            byte[] c = new byte[104];
            dis = new DataInputStream(fis);
            dis.read(c);
            if (c[0] == (byte) 0xFF && c[1] == (byte) 0xFE) {
                code = "UTF-16LE";
            }else if (c[0] == (byte) 0xFE && c[1] == (byte) 0xFF) {
                code = "UTF-16BE";
            } else {
                int len = c.length - 4;//为了防止后面的数组取值越界
                for (int i = 0; i < len; i++) {
                    if ((c[i] >> 7 & 0xff) == 0x00) {
                        continue;
                    }
                    if ((c[i] >> 4 & 0xff) == 0xff && (c[++i] >> 6 & 0xff) == 0xfe && (c[++i] >> 6 & 0xff) == 0xfe && (c[++i] >> 6 & 0xff) == 0xfe) {
                        continue;
                    }
                    if ((c[i] >> 5 & 0xff) == 0xff && (c[++i] >> 6 & 0xff) == 0xfe && (c[++i] >> 6 & 0xff) == 0xfe) {
                        continue;
                    }
                    if ((c[i] >> 6 & 0xff) == 0xff && (c[++i] >> 6 & 0xff) == 0xfe) {
                        continue;
                    }
                    flag = false;
                    break;
                }
                if (flag){
                    code = "UTF-8";
                }else {
                    code = "gbk";
                }
            }

        } catch (IOException e) {
            log.error("读取文件编码类型失败", e);
            throw new ApiException("上传文件按失败,请稍后再试!");
        } finally {
            if (dis != null) {
                try {
                    dis.close();
                } catch (IOException e) {
                    log.error("读取文件编码类型关闭流失败", e);
                }
            }
        }
        return code;
    }
}

标签:编码,code,java,读取,&&,new,0xff,import,txt
From: https://www.cnblogs.com/MC-Bonnie/p/18160208

相关文章

  • js使用xlsx读取excel文件
    官方案例:https://oss.sheetjs.com/sheetjs/参考:https://www.jb51.net/javascript/293098ilx.htm大致的代码如下,如果要实际使用还得修改修改完善完善。<inputtype="file"id="uploadExcel"multiple onChange=’onImportExcel'/>onImportExcel=file=>{//......
  • python读取xml,添加节点
    采用minidom读取,在dom上创建新节点,dom.createElement('item')再将节点挂在对应节点下byCardNo.appendChild(item)将修改后的dom重新写入,建议换一个文件名再测试,避免覆盖defadd(filename):#创建dom文档dom=minidom.parse(filename)root=dom......
  • 编码技巧C++
    编码技巧C++非零都是true在c++环境下不等于0的数值都被认为是true在判断一个值是否为0时以下代码是等效的,但第一种效率更高inti=123;if(i)cout<<"i不为0";if(i!=0)cout<<"i不为0";不需要用到下标的计数循环可以不用for语句intn;cin>>n;while(n--){......
  • 「白嫖」开源的后果就是供应链攻击么?| 编码人声
      「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 面对网络安全威胁日益严重的今天,软件供应链安全已经成为开发者领域无法避免的焦点。从令人瞠目的ApacheLog4j......
  • python读取yaml配置文件的方法
    yaml简介1.yaml[ˈjæməl]:YetAnotherMarkupLanguage:另一种标记语言。yaml是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式2.yaml基本语法规则:大小写敏感使用缩进表示层级关系缩进时不允许使用Ta......
  • python读取xls表格中指定列或行范围的数据
    importxlrd#打开Excel文件workbook=xlrd.open_workbook('test01.xls')#获取第一个工作表worksheet=workbook.sheet_by_index(0)#指定的行区域#读取第(row_index_x+1)行中,第(start_cols+1)列至第end_cols列范围的数据start_cols=0#第(start_cols+1)列end_cols......
  • delphi清理txt文件多余的空格
    PDF文件转存为文本,多了一堆不需要的空格,写个小程序处理一下,没逻辑,直接上代码。delphi用的是XE11.3unitUnitSmallMain;interfaceusesSystem.SysUtils,System.Types,System.UITypes,System.Classes,System.Variants,FMX.Types,FMX.Controls,FMX.Forms,FMX.Grap......
  • 使用pandas高效读取筛选csv数据
    前言在数据分析和数据科学领域中,Pandas是Python中最常用的库之一,用于数据处理和分析。本文将介绍如何使用Pandas来读取和处理CSV格式的数据文件。什么是CSV文件?CSV(逗号分隔值)文件是一种常见的文本文件格式,用于存储表格数据,其中每行表示一条记录,字段之间用逗号或其他......
  • 西安站开营!AI 编码助手通义灵码帮大学生“整活儿”
    如何更好地与AI为伴,做时代的先进开发者?4月17日,阿里云推出的AI编程助手通义灵码与云工开物“高校训练营”走进西安多所高校开启实操培训,结合AI辅助编程的发展背景、通义灵码的具体能力和应用实操,帮助在校大学生了解人工智能技术在编程领域的发展,利用AI辅助编码,提升学习......
  • 西安站开营!AI 编码助手通义灵码帮大学生“整活儿”
    如何更好地与AI为伴,做时代的先进开发者?4月17日,阿里云推出的AI编程助手通义灵码与云工开物“高校训练营”走进西安多所高校开启实操培训,结合AI辅助编程的发展背景、通义灵码的具体能力和应用实操,帮助在校大学生了解人工智能技术在编程领域的发展,利用AI辅助编码,提升学习......