使用Java

时间:2016-05-06 10:08:10

标签: java csv file-io java-6

我有以下两个要求:

  1. 读取CSV文件并逐行将行放入数据库(RDSMS)而不进行任何数据操作。
  2. 读取CSV文件并将此数据放入数据库(RDBMS)。在这种情况下,行Z可能依赖于行B.因此需要有一个登台DB(内存或另一个登台RDBMS)
  3. 我正在分析实现这个目标的多种方法:

    • 使用Core java,并以Producer-consumer方式读取文件。
    • 使用Apache Camel和BeanIO读取csv文件。
    • 使用SQL读取文件。

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

    我在stackoverflow上找到了一些链接,但我正在寻找更多选项:

    我正在使用Java6进行实施。

3 个答案:

答案 0 :(得分:0)

您应该使用NIO包在GB中执行此类操作。 NIO是异步的,迄今为止最快,最可靠。您可以通过NIO打包简单地读取块中的文件,然后使用批量命令而不是单个插入插入到db中。单次插入会占用大量CPU周期,并可能导致OOM错误。

答案 1 :(得分:0)

你可以使用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();

答案 2 :(得分:0)

我们正在使用Apache Camel"文件:"用于读取文件和处理数据的协议。