首页 > 解决方案 > 如何将 CSV 文件数据存储到 Java 中的数组中?

问题描述

这是我正在使用的 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 

标签: javaarrayscsv

解决方案


在尝试将 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();

    }

} 

输出:

输出


推荐阅读