如何在java中读取大型csv文件并将每行拆分为字符串数组
我有GB大小的csv文件,我可以读取它,但当将其拆分为数组然后打印时,会导致ArrayIndexOutOfBoundsException 这是我的节目如何在java中读取大型csv文件并将每行拆分为字符串数组,java,string,csv,split,Java,String,Csv,Split,我有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.hasNext
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行之后,
它导致->
线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常异常:3
在
enterdatatosql.TestPrintingAllLine.main(TestPrintingAllLine.java:45)
结果:1
第45行是->System.out.println(数据[0]+“”+数据[1]+“”+数据[2]+”
“+数据[3])
在打印数据[0]之前,请检查数据[1]、数据[2]和数据[3]是否为空。。在少数行数据[1]或数据[2]或数据[3]为空的情况下,可能会出现这种情况,并且在打印数据[0]、数据[1]、数据[2]和数据[3]检查其是否为空之前,它会生成此错误。。在少数行数据[1]或数据[2]或数据[3]为空的情况下,可能会出现这种情况,并且在打印数据[0]、数据[1]、数据[2]和数据[3]检查其是否为空之前,它会生成此错误。。在少数行数据[1]或数据[2]或数据[3]为空的情况下,可能会出现这种情况,并且在打印数据[0]、数据[1]、数据[2]和数据[3]检查其是否为空之前,它会生成此错误。。在少数行中可能会出现这种情况,数据[1]或数据[2]或数据[3]将为空,并产生此错误我会将此作为注释发布,但可能会变得混乱 您应该检查每个拆分上是否有“4个部分”,因为有些行可能只有三个/两个/等
System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);
在这一行之前,首先检查数据
有四个部分
编辑
我想你的问题在536行,你只有两个逗号而不是三个。这意味着您的数据数组将如下所示:
|----|----|----|
01 2我会将此作为评论发布,但它可能会变得混乱 您应该检查每个拆分上是否有“4个部分”,因为有些行可能只有三个/两个/等
System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);
在这一行之前,首先检查数据
有四个部分
编辑
我想你的问题在536行,你只有两个逗号而不是三个。这意味着您的数据数组将如下所示:
|----|----|----|
01 2我会将此作为评论发布,但它可能会变得混乱 您应该检查每个拆分上是否有“4个部分”,因为有些行可能只有三个/两个/等
System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);
在这一行之前,首先检查数据
有四个部分
编辑
我想你的问题在536行,你只有两个逗号而不是三个。这意味着您的数据数组将如下所示:
|----|----|----|
01 2我会将此作为评论发布,但它可能会变得混乱 您应该检查每个拆分上是否有“4个部分”,因为有些行可能只有三个/两个/等
System.out.println(data[0]+" "+data[1]+" "+data[2]+" "+data[3]);
在这一行之前,首先检查数据
有四个部分
编辑
我想你的问题在536行,你只有两个逗号而不是三个。这意味着您的数据数组将如下所示:
|----|----|----|
0 1 2尝试以下代码:
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中,请尝试以下代码:
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中,请尝试以下代码:
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中,请尝试以下代码:
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中错误发生在第536行,但没有这样的问题打开文件并检查第535行和第536行一定有一些不同。数据将不可用。在这里打印行。。。从530到540的csv文件中,我复制了该行及其前一行,后一行最多复制了20行。和已执行但没有错误最好先发布前600行:)以查找根本原因错误发生在第536行,但没有此类问题打开文件并检查第535行和第536行一定有一些差异。数据将不可用。在这里打印行。。。从530到540的csv文件中,我复制了该行及其前一行,后一行最多复制了20行。和已执行但没有错误最好先发布前600行:)以查找根本原因错误发生在第536行,但没有此类问题打开文件并检查第535行和第536行一定有一些差异。数据将不可用。在这里打印行。。。从530到540的csv文件中,我复制了该行及其前一行,后一行最多复制了20行。和已执行但没有错误最好先发布前600行:)以查找根本原因错误发生在第536行,但没有此类问题打开文件并检查第535行和第536行一定有一些差异。数据将不可用。在这里打印行。。。从530到540的csv文件中,我复制了该行及其前一行,后一行最多复制了20行。和已执行但无错误最好先发布前600行:)以查找根本原因您的错误不可再现,因此无法得到合理的答案。请检查“数据”列表的长度,即:data.size();在打印它的内容之前谢谢moe,如果我的答案不清楚,这是一个好主意,但这就是我说的检查数据有四个部分的意思首先谢谢大家现在我在打印数组之前添加了这行如果(data.length==4){System.out.println(data[0]+“”+data[1]+“”+data[2]+“”+data[3]);}它会成功您的错误不可再现,因此无法得到合理的答案。请检查“数据”列表的长度,即:data.size();在打印它的内容之前谢谢moe,如果我的答案不清楚,这是一个好主意,但这就是我说检查数据有四个部分的意思首先谢谢大家现在我