• [java]通过java代码读取TXT、CSV文件的内容


    目录

    1.引入java

    2.实现代码


          最近在编写一个通用可配置的实时ETL工具,即把通过Flink把Kafka的JSON 格式的数据解析后写入关系型数据库,业务要求新来一个JSON格式的业务数据后,通过在配置文件中读取JSON和关系型数据库中表的列映射关系,运行作业即可入库;每一个JSON格式的API对应一个CSV的配置文件,因此需要读取CSV的文件获取配置,本文记录读取CSV和过程,顺便记录了读取TXT的过程。

    1.引入java

    使用com.csvreader.CsvReader时需要在pom.xml中引用对应的jar包

    1. <!--csv文件操作-->
    2. <dependency>
    3. <groupId>net.sourceforge.javacsv</groupId>
    4. <artifactId>javacsv</artifactId>
    5. <version>2.0</version>
    6. </dependency>

    2.实现代码

    1. package util;
    2. import com.csvreader.CsvReader;
    3. import java.io.BufferedReader;
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.InputStreamReader;
    7. import java.nio.charset.Charset;
    8. import java.util.ArrayList;
    9. public class ReadFileTool {
    10. //读取文件
    11. public static String readTextFile(String jsonFile) {
    12. StringBuilder stringBuilder = new StringBuilder();
    13. try {
    14. //01.FileInputStream(字节流) 实现了InputStream接口,用来读取文件中的字节流,参数是文件或者文件路径+文件名称
    15. FileInputStream fileInputStream = new FileInputStream(jsonFile);
    16. //02.将 fileInputStream(字节流) 流作为参数,转为InputStreamReader(字符流)
    17. InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
    18. //03.将 字符流(参数)转为字符串流,带缓冲的流读取,默认缓冲区8k
    19. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    20. String tempString;
    21. while ((tempString = bufferedReader.readLine()) != null)
    22. {
    23. // 将字符串 添加到 stringBuilder中
    24. stringBuilder.append(tempString);
    25. }
    26. bufferedReader.close();
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. }
    30. return stringBuilder.toString();
    31. }
    32. //通过BufferedReader读取CSV
    33. public static ArrayList readCsvFileFromJava(String csvFile,String encoding) {
    34. ArrayList<String[]> csvArrList=new ArrayList<String[]>();
    35. StringBuilder stringBuilder = new StringBuilder();
    36. try {
    37. //01.FileInputStream(字节流) 实现了InputStream接口,用来读取文件中的字节流,参数是文件或者文件路径+文件名称
    38. FileInputStream fileInputStream = new FileInputStream(csvFile);
    39. //02.将 fileInputStream(字节流) 流作为参数,转为InputStreamReader(字符流)
    40. InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, encoding);
    41. //03.将 字符流(参数)转为字符串流,带缓冲的流读取,默认缓冲区8k
    42. BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    43. String line;
    44. while ((line = bufferedReader.readLine()) != null)
    45. {
    46. // System.out.println(line);
    47. String item[] = line.split(",",-1);//CSV格式文件为逗号分隔符文件,这里根据逗号切分,-1表示获取所有空值
    48. csvArrList.add(item);
    49. }
    50. bufferedReader.close();
    51. } catch (Exception e) {
    52. e.printStackTrace();
    53. }
    54. return csvArrList;
    55. }
    56. //通过com.csvreader.CsvReader 读取CSV
    57. public static ArrayList readCsvFileFromCsvReader(String csvFile,String encoding) {
    58. ArrayList<String[]> csvArrList=new ArrayList<String[]>();
    59. try {
    60. CsvReader reader = new CsvReader(csvFile, ',', Charset.forName(encoding));
    61. reader.readHeaders();
    62. String[] headArray = reader.getHeaders();//获取标题
    63. for(String a:headArray){
    64. System.out.print(a);
    65. }
    66. System.out.println();
    67. System.out.println("---------");
    68. while (reader.readRecord()) {
    69. // System.out.println(Arrays.asList(reader.getValues()));
    70. // 按行读取,并把每一行的数据添加到list集合
    71. csvArrList.add(reader.getValues());
    72. }
    73. reader.close();
    74. } catch (Exception e) {
    75. e.printStackTrace();
    76. }
    77. return csvArrList;
    78. }
    79. //测试
    80. public static void main(String[] args) {
    81. String userDir = System.getProperty("user.dir");
    82. String fileDir = userDir + File.separator + "sourceFile" + File.separator;
    83. String cfgFileName = "dwd_op_event.csv";
    84. String csvFullFileName = fileDir + cfgFileName;
    85. ArrayList<String []> csvArrList =readCsvFileFromCsvReader(csvFullFileName,"GBK");
    86. }
    87. }
  • 相关阅读:
    windows本地文件上传linux 或 linux输入rz命令后出现receive.**B0100000023be50
    python实现的一些方法,可以直接拿来用的那种
    SSM整合Thymeleaf时,抽取公共页面并向其传递参数
    Vue模块语法上(插值&指令&过滤器&计算属性-监听属性)
    【Linux02-基本权限】“root的霸权”
    【逗老师的无线电】Debian Linux手工编译安装MMDVM
    2022 RoboCom 世界机器人开发者大赛-本科组(省赛)-RC-u5 树与二分图
    Go HTTP 调用(下)
    ANR问题的分析与解决思路
    MySQL的内置函数&复合查询&内外连接
  • 原文地址:https://blog.csdn.net/henku449141932/article/details/125510693