繁体   English   中英

如何读取大型csv文件并将每一行拆分为java中的字符串数组

[英]How to Read large size csv file and split each line to string array in java

我有GB大小的csv文件,我能够读取,但是将其拆分为数组然后打印时会导致ArrayIndexOutOfBoundsException这是我的程序

FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream("file.csv");
sc = new Scanner(inputStream, "UTF-8");
int j=0;
while (sc.hasNextLine()) {
String[] data=new String[4]; 
String line=sc.nextLine();
data=line.split(",");
System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);
}
if (sc.ioException() != null) {
throw sc.ioException();
}
}       
catch (IOException ex) {
Logger.getLogger(TestPrintingAllLine.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}

在执行了536行之后,它导致->

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:3在enterdatatosql.TestPrintingAllLine.main(TestPrintingAllLine.java:45)Java结果:1。

第45行是-> System.out.println(data [0] +“” + data [1] +“” + data [2] +“” + data [3]);

我会将其发布为评论,但可能会变得凌乱。

您应该检查每个拆分是否有“ 4个部分”,因为某些行可能只有3/2 / etc。

System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);

在此行之前,首先检查data有四个部分。

编辑

我认为您的问题出在536行上,您只有两个逗号而不是三个。 这意味着您的数据数组将如下所示:

| ---- | ---- | ---- | 0 1 2 <-索引

您通常会在哪里:

| ---- | ---- | ---- | ---- | 0 1 2 3 <-索引

由于您的打印行将要打印索引3 ,因此您将得到索引超出范围错误,因为此行上没有索引为3的“部分”。

在打印数据[0],数据[1],数据[2]和数据[3]之前,请检查其是否为空..在少数几行数据[1]或数据[2]或数据[3中可能是这种情况]将为空,并且正在生成此错误

试试这个代码:

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;

public class ReadValues {

    public static void main(String[] args) throws IOException {
        FileInputStream stream = new FileInputStream("D:\\jointIndustry\\Test\\src\\input.csv");
        String data = IOUtils.toString(stream);
        String data1[] = data.split(",");
        for(String str : data1){
            System.out.println(str);
        }
    }
}

您需要从maven / apache网站下载commons-io-1.3.2.jar并将其设置为classapth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM