Java 将csv文件读入数组

Java 将csv文件读入数组,java,arrays,csv,Java,Arrays,Csv,我正在尝试将csv文件“read_ex.csv”读入数组。我在web/stackoverflow上进行了无休止的搜索,以找到将文件读入数组的方法。我所能做的最好的事情就是以流式方式读取它,但由于文件大小可变,我无法将其存储在数组中。我相信ArrayList是一种处理可变大小数组的方法,但我不知道如何使用它。本质上,我希望能够在while循环完成后访问字符串数组“values” import java.util.Scanner; import java.io.FileNotFoundExcepti

我正在尝试将csv文件“read_ex.csv”读入数组。我在web/stackoverflow上进行了无休止的搜索,以找到将文件读入数组的方法。我所能做的最好的事情就是以流式方式读取它,但由于文件大小可变,我无法将其存储在数组中。我相信ArrayList是一种处理可变大小数组的方法,但我不知道如何使用它。本质上,我希望能够在while循环完成后访问字符串数组“values”

import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.File;

public class sortarray {
     public static void main (String []agrs){
         String fileName= "read_ex.csv";
         File file= new File(fileName);


         try{
             Scanner inputStream= new Scanner(file);
             while(inputStream.hasNext()){
             String data= inputStream.next();
             String[] values = data.split(",");
             System.out.println(values[1]);
             }
             inputStream.close();
          }catch (FileNotFoundException e) {
             e.printStackTrace();
     }
     //This prints out the working directory
     System.out.println("Present Project Directory : "+ System.getProperty("user.dir"));

    }           

}

我是java新手,我对任何将csv读入初学者能够理解的文件的方法都持开放态度

这里是一个现有的解决方案,为您从,该项目。看

这是非常容易使用的开箱即用

下面是一个基本的工作流:

  • 创建一个类,该类包含与文件列“匹配”的字段
  • csv中的每一行都是该类的对象,其属性与csv中的字段相对应。使用库获取每个字段,并将其以循环形式存储在对象中
  • 在循环中,您将使用从csv读取的字段/属性将对象存储在ArrayList中
  • 循环结束后,ArrayList中的元素将与csv文件中的行“匹配”。您可以自由访问列表中的任何行/元素
如果您不熟悉Java的工作原理,请参考几乎所有的Java在线教程,包括


关于使用Commons CSV的数百篇文章。

尽管使用@Minjun.Y提到的Apache CSV库非常好,但我尝试提供一种更接近您的代码,并且可能更易于您遵循的解决方案:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class CsvParser {

    public static void main(String[] args) {
        String fileName= "read_ex.csv";
        File file= new File(fileName);

        // this gives you a 2-dimensional array of strings
        List<List<String>> lines = new ArrayList<>();
        Scanner inputStream;

        try{
            inputStream = new Scanner(file);

            while(inputStream.hasNext()){
                String line= inputStream.next();
                String[] values = line.split(",");
                // this adds the currently parsed line to the 2-dimensional string array
                lines.add(Arrays.asList(values));
            }

            inputStream.close();
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // the following code lets you iterate through the 2-dimensional array
        int lineNo = 1;
        for(List<String> line: lines) {
            int columnNo = 1;
            for (String value: line) {
                System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
                columnNo++;
            }
            lineNo++;
        }
    }

}
程序将打印以下输出:

Line 1 Column 1: value_1-1
Line 1 Column 2: value_1-2
Line 1 Column 3: value_1-3
Line 1 Column 4: value_1-4
Line 2 Column 1: value_2-1
Line 2 Column 2: value_2-2
Line 2 Column 3: value_2-3
Line 2 Column 4: value_2-4
Line 3 Column 1: value_3-1
Line 3 Column 2: value_3-2
Line 3 Column 3: value_3-3
Line 3 Column 4: value_3-4
Line 4 Column 1: value_4-1
Line 4 Column 2: value_4-2
Line 4 Column 3: value_4-3
Line 4 Column 4: value_4-4
Line 5 Column 1: value_5-1
Line 5 Column 2: value_5-2
Line 5 Column 3: value_5-3
Line 5 Column 4: value_5-4

希望这有帮助:)

要将csv文件解析为数组,请使用以下代码

const csv = require('csv-parser');
    const fs = require('fs');
    
    var csvData = [];
    var apiNames = [];
    fs.createReadStream("APIsName.csv")
    .pipe(csv(['ID',"API"]))
      .on('data', function (csvrow) {
        csvData.push(csvrow);
      })
      .on('end', function () {
    
        for (i = 0; i < 5; i++) {
    
          console.log(csvData);
        }
        for(y=0;y<apiNames.length;y++){
          console.log(apiNames[y].names);
        }
      });
      
const csv=require('csv-parser');
常数fs=要求('fs');
var csvData=[];
变量apiNames=[];
fs.createReadStream(“APIsName.csv”)
.pipe(csv(['ID','API']))
.on(“数据”,功能(csvrow){
csvData.push(csvrow);
})
.on('end',函数(){
对于(i=0;i<5;i++){
console.log(csvData);
}

对于(y=0;ythanks)链接。在“Iterable records=CSVFormat.EXCEL.parse(In);”行中,我假设“CSVRecord”是类,但“CSVFormat.EXCEL.parse(In)”指的是什么。@mikeL而不是猜测,请阅读文档。文档说明Commons CSV支持五种不同的格式。是一个常量(预定义)由Microsoft Excel应用程序生成的特定风格的CSV的对象。引用:Excel文件格式(使用逗号作为值分隔符)。请注意,Excel使用的实际值分隔符取决于区域设置…@Micheal Lihs,感谢您提供的详细信息。您回答了我的问题以及其他一些问题!我正在寻找类似以下内容:)感谢您的回答如果任何csv值包含逗号字符,您的代码会处理它吗?我相信使用Apache的Commons解决方案可以处理csv文件中转义的邪恶字符。我收到一个编译错误“类型列表不带参数”。此外,输入文件行被打断,无法很好地加载。这似乎是随机的,有时一个字段中的行被打断。实际上每行发生七次。也就是说,每一个输入行被打断七次。欢迎使用StackOverflow!如果您可以在代码中添加注释来解释它的作用,这将对其他人有所帮助锿。
const csv = require('csv-parser');
    const fs = require('fs');
    
    var csvData = [];
    var apiNames = [];
    fs.createReadStream("APIsName.csv")
    .pipe(csv(['ID',"API"]))
      .on('data', function (csvrow) {
        csvData.push(csvrow);
      })
      .on('end', function () {
    
        for (i = 0; i < 5; i++) {
    
          console.log(csvData);
        }
        for(y=0;y<apiNames.length;y++){
          console.log(apiNames[y].names);
        }
      });