【问题标题】:Parsing a CSV into 2D array generates NullPointerException将 CSV 解析为 2D 数组会生成 NullPointerException
【发布时间】:2018-03-09 11:46:01
【问题描述】:

使用 ReadInputCSVFromFile 方法从文件中读取样本 CSV 并在使用 split(",") 函数后将其解析为 String 数组,并将其传递给 2D 数组以完全读取它。 PrintResultsForTesting 方法仅用于打印 2D 数组以供视觉忽略。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class CSVReader {
    public static String[][] readIntoArray;
    public static String[][] myArray;
    public static String[][] csvResults;
    public static int countRow = 0;
    public static int countColumn = 0;

    public static void main(String[] args) {
        csvResults = ReadInputCSVFromFile(myArray);
        PrintResultsForTesting(csvResults);
    }

    public static void PrintResultsForTesting(String[][] csvResults) {
        String[][] newMyArray = new String[myArray.length][myArray[0].length];
        for (int i = 0; i < csvResults.length; ++i) {
            for (int j = 0; j < csvResults[0].length; ++j) {
                System.out.println(csvResults[i][j]);
            }
        }
    }

    public static String[][] ReadInputCSVFromFile(String[][] myArray) {
        countRow = 0;
        countColumn = 0;
        Scanner scanner;
        String inputLine;
        String fileLocation;

        fileLocation = "D://WorkSpace_Git//methods//iq-distribution//docs/SAP.csv";
        try {
            scanner = new Scanner(new BufferedReader(new FileReader(fileLocation)));

            while (scanner.hasNext()) {
                inputLine = scanner.nextLine();
                String[] readIntoArray = inputLine.split(",");

                // count rows and columns
                ++countRow;
                countColumn = readIntoArray.length;
                myArray = new String[countRow][countColumn];
            }

            for (int i = 0; i < countRow; ++i) {
                for (int j = 0; j < countColumn; ++j) {
                    myArray[i][j] = readIntoArray[i][j];

                }
            }
            System.out.println("Rows: " + countRow + '\n' + "Columns: " + countColumn);
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return myArray;
    }
}

错误是:

project.CSVReader.ReadInputCSVFromFile(CSVReader.java:52) at project.CSVReader.main(CSVReader.java:16) 的线程“main”java.lang.NullPointerException 中的异常以退出代码 1 结束进程

【问题讨论】:

  • 有什么问题?您是否收到错误消息?你被什么困住了?
  • 好的,所以错误如下: project.CSVReader.ReadInputCSVFromFile(CSVReader.java:52) at project.CSVReader.main(CSVReader.java) 的线程“main”java.lang.NullPointerException 中的异常:16) 进程以退出代码 1 结束

标签: java csv multidimensional-array methods


【解决方案1】:

简要查看您的代码后,我发现了一个错误。调用此方法时:

public static String[][] ReadInputCSVFromFile(String[][] myArray) {

myArraynull

如果要写入数组,则需要先实例化数组。

如果您实际上使用的是数组,您应该提前知道它的维度。如果你不知道,可以考虑使用java.util.List 的一些实现——比如java.util.ArrayList

另一个问题是异常处理。如果未找到该文件,则捕获异常并且您仍然调用此方法 PrintResultsForTesting 并得到不可预测的结果。最好使用throws 子句并一起停止执行。因此,不要在方法 ReadInputCSVFromFile 中使用 try catch,只需在此方法中使用 throws FileNotFoundException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2013-09-24
    • 1970-01-01
    • 2018-05-16
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多