使用 Java 以 GB 读取 .csv 文件
Read .csv file in GB's using Java
我有以下两个要求:
- 读取 CSV 文件并将行逐行放入数据库 (RDSMS) 而无需任何数据操作。
- 读取 CSV 文件并将此数据放入数据库 (RDBMS)。在这种情况下,Z 行可能依赖于 B 行。因此需要有一个暂存数据库(内存中或另一个暂存 RDBMS)
我正在分析实现此目的的多种方法:
- 使用核心java,以生产者-消费者方式读取文件。
- 使用 Apache Camel 和 BeanIO 读取 csv 文件。
- 正在使用 SQL 读取文件。
想知道是否有行业定义的首选方式来执行此类任务?
我在 Whosebug 上找不到几个链接,但我正在寻找更多选项:
- How to read a large text file line by line using Java?
- Read a huge file of numbers in Java in a memory-efficient way?
- Read large CSV in java
我正在使用 Java6 来实现。
您应该使用 NIO 包以 GB 为单位执行此类操作。 NIO 是异步的,迄今为止最快且最可靠。您可以通过 NIO 打包简单地读取文件块,然后使用批量命令而不是单次插入插入到数据库中。单次插入占用大量 CPU 个周期,并可能导致 OOM 错误。
你可以使用RandomAccessFile读取csv文件,它给你足够快的读取速度,它不需要任何额外的jar文件,这里是代码,
File f=new File(System.getProperty("user.home")+"/Desktop/CSVDOC1.csv");
RandomAccessFile ra = new RandomAccessFile(f,"rw");
ra.seek(0);//Read from start
long p=ra.getFilePointer();
String d= ra.readLine();
ra.seek(p);
while(d!=null){
//Each line data stored in variable d
d=ra.readLine();
//d="col1","col2","col2","col3"
//Separate line data by separator ","
//insert row values into database
}
//Release file lock
ra.close();
我们正在使用 Apache Camel 的 "File:" 协议来读取文件和处理数据。
我有以下两个要求:
- 读取 CSV 文件并将行逐行放入数据库 (RDSMS) 而无需任何数据操作。
- 读取 CSV 文件并将此数据放入数据库 (RDBMS)。在这种情况下,Z 行可能依赖于 B 行。因此需要有一个暂存数据库(内存中或另一个暂存 RDBMS)
我正在分析实现此目的的多种方法:
- 使用核心java,以生产者-消费者方式读取文件。
- 使用 Apache Camel 和 BeanIO 读取 csv 文件。
- 正在使用 SQL 读取文件。
想知道是否有行业定义的首选方式来执行此类任务?
我在 Whosebug 上找不到几个链接,但我正在寻找更多选项:
- How to read a large text file line by line using Java?
- Read a huge file of numbers in Java in a memory-efficient way?
- Read large CSV in java
我正在使用 Java6 来实现。
您应该使用 NIO 包以 GB 为单位执行此类操作。 NIO 是异步的,迄今为止最快且最可靠。您可以通过 NIO 打包简单地读取文件块,然后使用批量命令而不是单次插入插入到数据库中。单次插入占用大量 CPU 个周期,并可能导致 OOM 错误。
你可以使用RandomAccessFile读取csv文件,它给你足够快的读取速度,它不需要任何额外的jar文件,这里是代码,
File f=new File(System.getProperty("user.home")+"/Desktop/CSVDOC1.csv");
RandomAccessFile ra = new RandomAccessFile(f,"rw");
ra.seek(0);//Read from start
long p=ra.getFilePointer();
String d= ra.readLine();
ra.seek(p);
while(d!=null){
//Each line data stored in variable d
d=ra.readLine();
//d="col1","col2","col2","col3"
//Separate line data by separator ","
//insert row values into database
}
//Release file lock
ra.close();
我们正在使用 Apache Camel 的 "File:" 协议来读取文件和处理数据。