将.txt文件加载到2D字符串数组中

时间:2016-07-08 08:09:43

标签: java arrays 2d java.util.scanner try-finally

我目前正在完成一项任务,并多次浏览工作簿和java网站,但我似乎无法看到我的错误。

我正在尝试将文件导入2D数组。我使用Scanner w / BufferedReader和FileReader来选择命令行参数(titanic.txt)。我在// TEST if语句中查看是否" fileInput"仍然是空的。在运行时没有问题。

以下是我的代码的一部分:

    //Declare Variables
    String[][] titanicArray = new String[1308][6];
    int[] classArray = new int[1308];
    int[] survivedIntArray = new int[1308];
    double[] ageArray = new double[1308];
    double[] ticketPriceArray = new double[1308];
    String inputFile = null;
    String answerStr = null;
    int answer1 = 0;

    Scanner fileInput = null;
    Scanner userInput = new Scanner(System.in);
    inputFile = args[0];

    //try statement to scan command-line argument and fill the array with the data
    try {
        fileInput = new Scanner(new BufferedReader(new FileReader(inputFile)));
        //TEST
        if (fileInput != null){
            System.out.println("Error Taking in file");
        }

        for (int row = 0; row < titanicArray.length; row++) {
            for (int col = 0; col < titanicArray[row].length; col++){
                while (fileInput.hasNext()){
                    titanicArray[row][col] = fileInput.next();
                }
            }
        }
    } finally {
        if (fileInput != null){
            System.out.println("Error Taking in file");
            fileInput.close();
        }//End of If for closing Scanner
    } //End of finally to close Scanner

注意:titanic.txt包含如下数据(Class,Suvived,Name,Sex,Age,TicketPrice)w / tab,没有空白行:

<1> 1艾伦,小姐。伊丽莎白沃尔顿女29 211.3375

<1> 1艾莉森,师父。哈德森特雷弗男性0.9167 151.5500

<0> 1 0 Allison,Miss.Helen Loraine female 2 151.5500

1 0 Allison,Hudson Joshua Creighton先生男性30 151.5500

1 0 Allison,Hudson J C夫人(Bessie Waldo Daniels)女25 151.5500

<1> 1安德森,哈里先生男48 48.5500

<1> 1安德鲁斯,小姐.Kornelia Theodosia女63 77.9583

2 个答案:

答案 0 :(得分:3)

   if (fileInput != null){
        System.out.println("Error Taking in file");
    }

您的代码中似乎有一个明显的错误: 为什么要fileInput != null成为问题? 无论如何,首先清理和简化代码总是一个好主意,然后寻求帮助。一些想法:

  • 将文件处理和文件解析分离为单独的方法
  • 使用try-with-resource来简化异常处理和资源关闭

答案 1 :(得分:0)

您拍摄的数组(列)的大小太小.next()仅为您提供前六个字符串,而输入中的名称似乎太长。