首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java读取csv文件Demo

Java读取csv文件Demo

作者头像
默 语
发布2024-11-20 11:06:48
发布2024-11-20 11:06:48
89200
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行
Java读取csv文件并将内容插入到数据库

博主 默语带您 Go to New World.个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


下面是一个简单的Java示例代码,演示如何读取CSV文件内容并将其解析为数据:

假设CSV文件的内容如下(示例.csv):

代码语言:javascript
代码运行次数:0
运行
复制
Name,Age,Location
Alice,25,New York
Bob,30,San Francisco
Charlie,22,Los Angeles

Java代码示例:

代码语言:javascript
代码运行次数:0
运行
复制
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CSVReaderDemo {

    public static void main(String[] args) {
        String csvFile = "path/to/your/example.csv";  // 替换为实际CSV文件路径

        List<String[]> csvData = readCSV(csvFile);

        for (String[] row : csvData) {
            for (String cell : row) {
                System.out.print(cell + " | ");
            }
            System.out.println();  // 换行
        }
    }

    public static List<String[]> readCSV(String csvFile) {
        List<String[]> data = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] row = line.split(",");
                data.add(row);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return data;
    }
}

此代码使用BufferedReader从CSV文件中逐行读取内容,并使用逗号分隔符将每行拆分为字符串数组。然后,它将每行数据存储在List<String[]>中。在示例的main方法中,它遍历并打印了每行数据。

请注意替换代码中的csvFile变量为您实际的CSV文件路径。此示例假设CSV文件的每行都以逗号作为分隔符,如果您的CSV文件使用其他分隔符或包含引号等特殊情况,请根据需要进行适当的处理。

POM

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example.DemoCrud</groupId>
    <artifactId>democurd</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>democurd</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--csv文件操作-->
        <dependency>
            <groupId>net.sourceforge.javacsv</groupId>
            <artifactId>javacsv</artifactId>
            <version>2.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis整合Springboot -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <!--           maven 添加json-->
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- 引入org.json所需依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!--bootstrap-webjar-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.0.0</version>
        </dependency>
        <!--配置文件注入时使用后会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/oracle/oracle-jdbc -->
        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.3.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>


        <!-- Druid 数据源依赖,集成了 Spring boot ,方便配置 druid 属性 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>

        <!-- Mysql 数据库驱动,spring boot 2.1.3 时,mysql 驱动版本为 8.0.15 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- 引入 Spring Data JPA,JPA 组件内部会依赖 JDBC 组件,JDBC 组件内部默认依赖的是 HikariCP 数据源-->
        <!--切换 druid 数据源时,HikariCP 依赖可以移除掉,不移除时也不影响-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!--引用 log4j2 spring boot 启动器,内部依赖了 slf4j、log4j;排除项目中的 logback-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

DEMO

代码语言:javascript
代码运行次数:0
运行
复制
package com.example.democrud.democurd.Prototype.demo01;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.csvreader.CsvReader;

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

public class csvDemo {


    public static void main(String[] args) throws IOException {
        String filePath="C:\\Users\\闫文超\\Desktop\\啊工作表.csv";

        //方式一
        Students();
        System.out.println("----------------  //方式一结尾-----------------------");
        //  //方式一
        Studentss();
        System.out.println("----------------  //方式二结尾-----------------------");

        readCsvByCsvReader(filePath);
        System.out.println("----------------  //方式三结尾-----------------------");

        System.out.println(readCsvByBufferedReader(filePath));
        System.out.println("----------------  //方式四结尾-----------------------");

        readCsvFile(filePath);
        System.out.println("----------------  //方式五结尾-----------------------");
    }






    public static void readCsvFile(String filePath){
        try {
            ArrayList<String[]> csvList = new ArrayList<String[]>();
            CsvReader reader = new CsvReader(filePath,',',Charset.forName("GBK"));
//          reader.readHeaders(); //跳过表头,不跳可以注释掉

            while(reader.readRecord()){
                csvList.add(reader.getValues()); //按行读取,并把每一行的数据添加到list集合
            }
            reader.close();
            System.out.println("读取的行数:"+csvList.size());

            for(int row=0;row<csvList.size();row++){

                //打印每一行的数据
                System.out.print(csvList.get(row)[0]+",");
                System.out.print(csvList.get(row)[1]+",");
              //  System.out.print(csvList.get(row)[2]+",");
              //  System.out.println(csvList.get(row)[3]+",");
                //如果第一列(即姓名列)包含lisa,则打印出lisa的年龄

                if(csvList.get(row)[0].equals("lisa")){
                    System.out.println("lisa的年龄为:"+csvList.get(row)[2]);
                }

            }
            System.out.println("\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * BufferedReader 读取
     * @param filePath
     * @return
     */
    public static ArrayList<String> readCsvByBufferedReader(String filePath) {
        File csv = new File(filePath);
        csv.setReadable(true);
        csv.setWritable(true);
        InputStreamReader isr = null;
        BufferedReader br = null;
        try {
            isr = new InputStreamReader(new FileInputStream(csv), "gbk");
            br = new BufferedReader(isr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String line = "";
        ArrayList<String> records = new ArrayList<>();
        try {
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                records.add(line);
            }
            System.out.println("csv表格读取行数:" + records.size());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return records;
    }










    public static ArrayList<String> readCsvByCsvReader(String filePath)  {

            ArrayList<String> strList = null;
            try {
                ArrayList<String[]> arrList = new ArrayList<String[]>();
                strList = new ArrayList<String>();
                //utf-8乱码
             //   CsvReader reader = new CsvReader(filePath, ',', Charset.forName("UTF-8"));
                CsvReader reader = new CsvReader(filePath, ',', Charset.forName("gbk"));
                while (reader.readRecord()) {
//                System.out.println(Arrays.asList(reader.getValues()));
                    arrList.add(reader.getValues()); // 按行读取,并把每一行的数据添加到list集合
                }
                reader.close();


                System.out.println("--------");
                System.out.println("读取的行数:" + arrList.size());
                // 如果要返回 String[] 类型的 list 集合,则直接返回 arrList
                // 以下步骤是把 String[] 类型的 list 集合转化为 String 类型的 list 集合
                for (int row = 0; row < arrList.size(); row++) {
                    // 组装String字符串
                    // 如果不知道有多少列,则可再加一个循环
                //   String ele = arrList.get(row)[0] + "," + arrList.get(row)[1] + ",";
                         //   + arrList.get(row)[2] + "," + arrList.get(row)[3] ;
                    String ele;
                    for (int i = 0; i < arrList.size()-1; i++) {
                         ele= arrList.get(row)[i];
                        strList.add(ele);
                        System.out.println(ele);
                    }


                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return strList;
        }







    public static void Studentss() {

        try {
            BufferedReader reader =new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\闫文超\\Desktop\\啊工作表.csv"),"gbk"));
            reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
            String line = null;
            while((line=reader.readLine())!=null){
                String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分

                String last = item[item.length-1];//这就是你要的数据了
                //int value = Integer.parseInt(last);//如果是数值,可以转化为数值
                System.out.println(last);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }





    public static void Students() {

        File csv = new File("C:\\Users\\闫文超\\Desktop\\啊工作表.csv");  // CSV文件路径
        BufferedReader br = null;
        try {
            //br = new BufferedReader(new FileReader(csv));
            br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\闫文超\\Desktop\\啊工作表.csv"), "gbk"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String line = "";
        String everyLine = "";
        try {
            List<String> allString = new ArrayList<>();
            while ((line = br.readLine()) != null)  //读取到的内容给line变量
            {
                everyLine = line;
                System.out.println(everyLine);
                allString.add(everyLine);
            }
            System.out.println("csv表格中所有行数:" + allString.size());
        } catch (IOException e) {
            e.printStackTrace();
        }





    }
}

测试结果

代码语言:javascript
代码运行次数:0
运行
复制
Name,age
谚文超,122
谚文超,68
csv表格中所有行数:3
----------------  //方式一结尾-----------------------
122
68
----------------  //方式二结尾-----------------------
--------
读取的行数:3
Name
age
谚文超
122
谚文超
68
----------------  //方式三结尾-----------------------
Name,age
谚文超,122
谚文超,68
csv表格读取行数:3
[Name,age, 谚文超,122, 谚文超,68]
----------------  //方式四结尾-----------------------
读取的行数:3
Name,age,谚文超,122,谚文超,68,

----------------  //方式五结尾-----------------------

DEMO1

代码语言:javascript
代码运行次数:0
运行
复制
package com.example.democrud.democurd.Prototype.demo01;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.*;
import java.util.stream.Collectors;

public class ListAndMap1Demo {

    public static void main(String[] args) {

      // 循环中获取数据
        stduentgetName();

     //处理异常嵌套数据
          stduents();



    }
    public static void stduentgetName() {

        Map<String, List<Student>> map = stduentInit();
        //System.out.println(JSONObject.toJSON(map));


        for (Map.Entry<String, List<Student>> entry : map.entrySet()) {
            String key = entry.getKey();
            List<Student> list = entry.getValue();
            System.out.println("key===>"+key);
            System.out.println("list===>"+list);

            List<String> collect = list.stream().map(Student::getName).collect(Collectors.toList());
            System.out.println("list: 集合数组==》" + collect);
            String collect1 = list.stream().map(Student::getName).collect(Collectors.joining(","));
            System.out.println("string: String数组==》" + collect1);

            System.out.println("--------------------------------------1---------------------------------------------");
            List<Student> collectle = list.stream().filter(v -> v.getAge() >= 20).collect(Collectors.toList());
            System.out.println("collectle==>"+collectle);



            System.out.println("---------------------------------2--------------------------------------------------");
            List<String> strList = new ArrayList<>();
            for (Student stu : list) {
                strList.add(stu.getName());
            }
            System.out.println("strList: " + strList);

        }


    }

    /**
     * 处理深层嵌套异常数据
     */
    public static void stduents() {

        List<Map<String, String>> list = new ArrayList<>();
        String str = "{\"sheets\":[{\"datas\":[{\"cells\":[{\"dataType\":2,\"value\":\"闫文超\"},{\"dataType\":1,\"value\":\"10.0\"}]},{\"cells\":[{\"dataType\":2,\"value\":\"老王\"},{\"dataType\":1,\"value\":\"20.0\"}]}],\"name\":\"Sheet1\",\"titles\":[\"Name\",\"AGE\"]}]}";
        JSONObject js = JSONObject.parseObject(str);
        //System.out.println(js);
        String sheets = js.get("sheets").toString();
        //System.out.println(sheets);
        JSONArray objects = JSONArray.parseArray(sheets);
        //System.out.println(objects);
        for (Object object : objects) {
            JSONObject js111 = JSONObject.parseObject(object.toString());
            //System.out.println(js111);
            String datas = js111.get("datas").toString();
            //System.out.println(datas);
            JSONArray objects1 = JSONArray.parseArray(datas);
            //System.out.println(objects1);
            for (Object o : objects1) {
                JSONObject js1111 = JSONObject.parseObject(o.toString());
                //System.out.println(js1111);
                String cells = js1111.get("cells").toString();
                //System.out.println(cells);
                JSONArray objects2 = JSONArray.parseArray(cells);
                //System.out.println("objects2 : "+ objects2);
                for (Object o1 : objects2) {
                    JSONObject js11111 = JSONObject.parseObject(o1.toString());
                    //System.out.println(js11111);
                    String dataType = js11111.get("dataType").toString();
                    String value = js11111.get("value").toString();
                    Map<String, String> map = new HashMap<>();
                    map.put(dataType, value);
                    list.add(map);
                    //System.out.println("这他妈那个傻逼写的 dataType=" + dataType + "  value="+ value);
                }

            }
        }

        System.out.println(list);

    }





    /**
     * 初始化list对象
     */
    public static Map<String, List<Student>> stduentInit() {

        Map<String, List<Student>> map = new HashMap<>();
        List<Student> list = new ArrayList<>();
        Student student = new Student(10, "马丹1", true);
        Student student1 = new Student(15, "马丹2", false);
        Student student2 = new Student(20, "马丹3", true);
        Student student3 = new Student(25, "马丹4", false);
        Student student4 = new Student(30, "马丹5", true);
        list.add(student);
        list.add(student1);
        list.add(student2);
        list.add(student3);
        list.add(student4);
        map.put("list", list);

        List<Student> list1 = new ArrayList<>();
        Student stu = new Student(10, "马丹1", true);
        Student stu1 = new Student(15, "马丹2", false);
        Student stu2 = new Student(20, "马丹3", true);
        Student stu3 = new Student(25, "马丹4", false);
        Student stu4 = new Student(30, "马丹5", true);
        list1.add(stu);
        list1.add(stu1);
        list1.add(stu2);
        list1.add(stu3);
        list1.add(stu4);
        map.put("list1", list1);
        return map;
    }


}

运行结果

代码语言:javascript
代码运行次数:0
运行
复制
key===>list1
list===>[Student(age=10, name=马丹1, sex=true), Student(age=15, name=马丹2, sex=false), Student(age=20, name=马丹3, sex=true), Student(age=25, name=马丹4, sex=false), Student(age=30, name=马丹5, sex=true)]
list: 集合数组==》[马丹1, 马丹2, 马丹3, 马丹4, 马丹5]
string: String数组==》马丹1,马丹2,马丹3,马丹4,马丹5
--------------------------------------1---------------------------------------------
collectle==>[Student(age=20, name=马丹3, sex=true), Student(age=25, name=马丹4, sex=false), Student(age=30, name=马丹5, sex=true)]
---------------------------------2--------------------------------------------------
strList: [马丹1, 马丹2, 马丹3, 马丹4, 马丹5]
key===>list
list===>[Student(age=10, name=马丹1, sex=true), Student(age=15, name=马丹2, sex=false), Student(age=20, name=马丹3, sex=true), Student(age=25, name=马丹4, sex=false), Student(age=30, name=马丹5, sex=true)]
list: 集合数组==》[马丹1, 马丹2, 马丹3, 马丹4, 马丹5]
string: String数组==》马丹1,马丹2,马丹3,马丹4,马丹5
--------------------------------------1---------------------------------------------
collectle==>[Student(age=20, name=马丹3, sex=true), Student(age=25, name=马丹4, sex=false), Student(age=30, name=马丹5, sex=true)]
---------------------------------2--------------------------------------------------
strList: [马丹1, 马丹2, 马丹3, 马丹4, 马丹5]
[{2=闫文超}, {1=10.0}, {2=老王}, {1=20.0}]

文件内容

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java读取csv文件并将内容插入到数据库
  • POM
  • DEMO
  • 测试结果
  • DEMO1
  • 运行结果
  • 文件内容
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档