当我尝试使用该数组时,我得到一个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.");
}
答案 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.");
文件是否存在?