试试Catch阵列?

时间:2014-12-10 03:24:33

标签: java arrays nullpointerexception try-catch

当我尝试使用该数组时,我得到一个nullPointerException。我该如何解决?我必须计算txt文件中的行并将其用作我的数组大小。

public static void main(String[] args) {
        String accountNum, password, give;  
        int count=0, menuChoice,size=0; 
        String[] validAccounts=null; 

        //gets the data from the file and stores into an array
        try {
            Scanner file= new Scanner (new FileReader("ATMdata.txt"));

            //counts the lines in the text file

            while (file.hasNextLine()) {
                size++;
                String theLine = file.nextLine();
            }

            validAccounts= new String[size];

            for ( int countFile=0; count==size; countFile++) {
                validAccounts[countFile]= file.nextLine();
            }
        }
        catch(Exception e) {
            System.out.println("Error processing file.");
        }

3 个答案:

答案 0 :(得分:1)

你的上一个for循环测试条件不好,

for ( int countFile=0; count==size; countFile++) {
    validAccounts[countFile]= file.nextLine();
}

应使用countFile(不是count)且小于size(否则您的循环体不会输入)

for (int countFile=0; countFile < size; countFile++) {
    validAccounts[countFile]= file.nextLine();
}

validAccounts中的每个元素都默认为null

您也没有关闭Scanner(并且您在文件末端)。我建议你使用类似List的集合,比如

try (Scanner file = new Scanner(new File(
        System.getProperty("user.home"), "ATMdata.txt"))) {
    List<String> validAccounts = new ArrayList<>();
    while (file.hasNextLine()) {
        validAccounts.add(file.nextLine());
    }
    System.out.printf("%d accounts%n", validAccounts.size());
    System.out.println(validAccounts);
} catch (Exception e) {
    e.printStackTrace();
}

答案 1 :(得分:1)

// countFile < size, not count == size
for (int countFile=0; countFile < size; countFile++)
{
    validAccounts[countFile]= file.nextLine();
}


我相信您还需要将Scanner重置为文件的开头。
while循环中,Scanner已将移至文件末尾

validAccounts= new String[size];
file = new Scanner (new FileReader("ATMdata.txt")); // Add this

// Continue with your for loop

答案 2 :(得分:0)

我在计算机上测试了以下代码:

Scanner file = new Scanner(new FileReader("H:\\ATMdata.txt.txt"));
e.printStackTrace();
System.out.println("Error processing file.");

文件是否存在?