java 导入csv
在Java中处理大数据CSV文件,我们通常使用开源库opencsv,Opencsv是一个用于读写CSV文件的Java库,它简单、快速并且易于使用,以下是如何使用opencsv导入大数据CSV文件的详细步骤。
(图片来源网络,侵删)
1、我们需要在项目中引入opencsv库,如果你的项目是Maven项目,可以在pom.xml文件中添加以下依赖:
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.2</version> </dependency>
如果你的项目是Gradle项目,可以在build.gradle文件中添加以下依赖:
implementation 'com.opencsv:opencsv:5.2'
2、引入依赖后,我们可以开始编写代码来读取CSV文件,以下是一个简单的示例,展示了如何使用opencsv读取CSV文件:
import com.opencsv.CSVReader; import com.opencsv.exceptions.CsvException; import java.io.FileReader; import java.io.IOException; import java.util.List; public class CsvReader { public static void main(String[] args) { String csvFile = "path/to/your/csv/file.csv"; // 替换为你的CSV文件路径 String line; String csvSplitBy = ","; // CSV列分隔符,根据实际情况修改 try (CSVReader reader = new CSVReader(new FileReader(csvFile), csvSplitBy)) { // 读取CSV文件的第一行(表头) List<String> header = reader.readNext(); System.out.println("Header: " + header); // 逐行读取CSV文件的内容 while ((line = reader.readNext()) != null) { System.out.println("Line: " + line); } } catch (IOException | CsvException e) { e.printStackTrace(); } } }
3、运行上述代码,你将看到CSV文件的内容被逐行打印出来,你可以根据需要对读取到的数据进行处理,你可以将数据存储到数据库中,或者进行数据分析等。
注意:由于CSV文件可能非常大,直接将其全部加载到内存中可能会导致内存溢出,在处理大数据CSV文件时,我们通常采用分批次读取的方式,以下是一个简单的示例,展示了如何使用opencsv分批次读取CSV文件:
import com.opencsv.CSVReader; import com.opencsv.exceptions.CsvException; import java.io.FileReader; import java.io.IOException; import java.util.List; public class CsvReader { public static void main(String[] args) { String csvFile = "path/to/your/csv/file.csv"; // 替换为你的CSV文件路径 String line; String csvSplitBy = ","; // CSV列分隔符,根据实际情况修改 int batchSize = 1000; // 每批次读取的行数,根据实际情况调整 int totalLines = 0; // 总行数,用于计算读取进度和剩余时间等 int currentBatch = 0; // 当前批次的索引,从0开始计数 long startTime = System.currentTimeMillis(); // 开始时间,用于计算读取速度等 long totalTime = 0; // 总耗时,用于计算读取速度等 long remainingTime = 0; // 剩余时间,用于显示读取进度等 boolean isFinished = false; // 是否已经读取完毕,用于控制循环退出条件等 try (CSVReader reader = new CSVReader(new FileReader(csvFile), csvSplitBy)) { // 读取CSV文件的第一行(表头) List<String> header = reader.readNext(); System.out.println("Header: " + header); totalLines++; // 表头也算一行,所以总数加1 currentBatch++; // 当前批次加1,因为已经读取了表头这一行 remainingTime = calculateRemainingTime(startTime, totalLines, batchSize); // 计算剩余时间并更新remainingTime变量的值 isFinished = true; // 因为已经读取了表头这一行,所以设置isFinished为true,表示可以进入循环了 } catch (IOException | CsvException e) { e.printStackTrace(); } finally { if (!isFinished) { // 如果还没有读取完毕,那么关闭资源等操作可以在这里进行,避免重复关闭资源等问题的发生。