Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将CSV文件从非常大的源解析为数组_Java_Parsing_Csv_Optimization - Fatal编程技术网

在java中将CSV文件从非常大的源解析为数组

在java中将CSV文件从非常大的源解析为数组,java,parsing,csv,optimization,Java,Parsing,Csv,Optimization,我有一个解析器,可以很好地处理大约60000行或更少的较小文件,但我必须解析一个超过1000万行的CSV文件,这种方法不起作用。它每10万行挂起10秒,我假设它是拆分方法,有没有更快的方法将数据从CSV解析到字符串数组 有关守则: String[][] events = new String[rows][columns]; Scanner sc = new Scanner(csvFileName); int j = 0; while (sc.hasNext())

我有一个解析器,可以很好地处理大约60000行或更少的较小文件,但我必须解析一个超过1000万行的CSV文件,这种方法不起作用。它每10万行挂起10秒,我假设它是拆分方法,有没有更快的方法将数据从CSV解析到字符串数组

有关守则:

    String[][] events = new String[rows][columns];
    Scanner sc = new Scanner(csvFileName);

    int j = 0;
    while (sc.hasNext()){
        events[j] = sc.nextLine().split(",");
        j++;
    }

根据经验,使用库通常比内部开发更有效。有几个库提供读取/解析csv文件。其中一个比较流行的是

您的代码无法可靠地解析CSV文件。如果值中有“,”或行分隔符怎么办?这也很慢

开始解析你的文件。它比ApacheCommonsCSV快3倍,具有更多的功能,我们使用它来处理数十亿行的文件

要将所有行解析为字符串列表,请执行以下操作:

CsvParserSettings settings = new CsvParserSettings(); //lots of options here, check the documentation

CsvParser parser = new CsvParser(settings);

List<String[]> allRows = parser.parseAll(new FileReader(new File("path/to/input.csv")));
CsvParserSettings设置=新的CsvParserSettings()//这里有很多选项,请查看文档
CsvParser parser=新的CsvParser(设置);
List allRows=parser.parseAll(新文件读取器(新文件(“path/to/input.csv”));

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。

您可能想尝试我刚刚发布的库:


它在运行时使用ASM动态生成CSV解析器+数据绑定,以提高性能

您确定要同时在内存中保留这么多条目吗?