使用 Java 以 GB 读取 .csv 文件

Read .csv file in GB's using Java

我有以下两个要求:

  1. 读取 CSV 文件并将行逐行放入数据库 (RDSMS) 而无需任何数据操作。
  2. 读取 CSV 文件并将此数据放入数据库 (RDBMS)。在这种情况下,Z 行可能依赖于 B 行。因此需要有一个暂存数据库(内存中或另一个暂存 RDBMS)

我正在分析实现此目的的多种方法:

想知道是否有行业定义的首选方式来执行此类任务?

我在 Whosebug 上找不到几个链接,但我正在寻找更多选项:

我正在使用 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:" 协议来读取文件和处理数据。