如何将.csv文件数据存储到Java中的数组中?

时间:2019-03-28 12:05:24

标签: java arrays csv

这是我正在使用的.csv文件:

B00123,55
B00783,35
B00898,67

我需要读取并存储在文件中输入的第一个值,例如B00123并将其存储到数组中。用户可以添加到文件中,因此它不是固定数量的记录。

到目前为止,我已经尝试了以下代码:

public class ArrayReader 
{
    static String xStrPath;
    static double[][] myArray;

    static void setUpMyCSVArray()
    {
        myArray = new double [4][5];

        Scanner scanIn = null;
        int Rowc = 0;
        int Row = 0;
        int Colc = 0;
        int Col = 0;
        String InputLine = "";
        double xnum = 0;
        String xfileLocation;

        xfileLocation = "src\\marks.txt";

        System.out.println("\n****** Setup Array ******");

        try
        {
            //setup a scanner
            /*file reader uses xfileLocation data, BufferedRader uses 
              file reader data and Scanner uses BufferedReader data*/
            scanIn = new Scanner(new BufferedReader(new FileReader(xfileLocation)));

            while (scanIn.hasNext())
            {              
                //read line form file
                InputLine = scanIn.nextLine();
                //split the Inputline into an array at the comas
                String[] InArray = InputLine.split(",");

                //copy the content of the inArray to the myArray
                for (int x = 0; x < myArray.length; x++)
                {
                    myArray[Rowc][x] = Double.parseDouble(InArray[x]);
                }
                //Increment the row in the Array
                Rowc++;
            }
        }
        catch(Exception e)
        {

        }
        printMyArray();
    }

    static void printMyArray()
    {
        //print the array
        for (int Rowc = 0; Rowc < 1; Rowc++)
        {
            for (int Colc = 0; Colc < 5; Colc++)
            {
                System.out.println(myArray[Rowc][Colc] + " ");
            }
            System.out.println();
        }
        return;
    }

    public static void main(String[] args)
    {
        setUpMyCSVArray();

    }

}

这会循环文件,但不会用任何数据填充数组。结果是:

****** Setup Array ******
[[D@42a57993
0.0 
0.0 
0.0 
0.0 
0.0 

帮助!

3 个答案:

答案 0 :(得分:2)

在尝试将ID转换为Double的第一行中,实际上发生了NumberFormatException。所以我修改了程序,对我有用。

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class ArrayReader 
{
    static String xStrPath;
    static Map<String,Double> myArray = new HashMap<>();

    static void setUpMyCSVArray()
    {

        Scanner scanIn = null;
        int Rowc = 0;
        int Row = 0;
        int Colc = 0;
        int Col = 0;
        String InputLine = "";
        double xnum = 0;
        String xfileLocation;

        xfileLocation = "/Users/admin/Downloads/mark.txt";

        System.out.println("\n****** Setup Array ******");

        try
        {
            //setup a scanner
            /*file reader uses xfileLocation data, BufferedRader uses 
              file reader data and Scanner uses BufferedReader data*/
            scanIn = new Scanner(new BufferedReader(new FileReader(xfileLocation)));

            while (scanIn.hasNext())
            {              
                //read line form file
                InputLine = scanIn.nextLine();
                //split the Inputline into an array at the comas
                String[] inArray = InputLine.split(",");

                //copy the content of the inArray to the myArray
                    myArray.put(inArray[0], Double.valueOf(inArray[1]));
                //Increment the row in the Array
                Rowc++;
            }
        }
        catch(Exception e)
        {
System.out.println(e);
        }
        printMyArray();
    }

    static void printMyArray()
    {
        //print the array
        for (String key : myArray.keySet()) {
            System.out.println(key + " = " + myArray.get(key));
        }
        return;
    }

    public static void main(String[] args)
    {
        setUpMyCSVArray();

    }

} 

输出:

Output

答案 1 :(得分:1)

代码无法读取任何内容,因此文件路径不正确。请给它绝对的文件路径。

            scanIn = new Scanner(new BufferedReader(new FileReader(xfileLocation)));

答案 2 :(得分:0)

我使用opencsv库从csv中读取。

import com.opencsv.CSVReader;

public class CSV {


    private static String file = <filepath>;

    private static List<String> list = new ArrayList<>();

    public static void main(String[] args) throws Exception {
      try {
        CSVReader reader = new CSVReader(new FileReader(file));
        String[] line;
        while ((line = reader.readNext()) != null) {
          list.add(line[0]);
        }
        Object[] myArray = list.toArray();
        System.out.println(myArray.length);
        System.out.println(myArray[0]);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
}

输出打印如下

3
B00123