从 args (java) 读取文件时捕获错误

catch error while reading file from args (java)

有人可以向我解释为什么我会收到 catch 错误吗?

我正在尝试从我传入 args 的文件中读取值(数字)。

而且我不太明白问题出在哪里。

import java.util.Scanner;//               Import the Scanner class to read text files
import java.io.File;//                    Import the File class
import java.io.FileNotFoundException;//   Import this class to handle errors
import java.io.*;

public class main extends GeneralMethods {
  public static void main(String[] args) {
    if (args.length <= 1 || args.length > 2) {
      println("Error, usage: software must get two input files");
      System.exit(1);
    }

    String file_name1 = args[0]; // data to insert
    String file_name2 = args[1]; // data to check

    File data_to_insert = new File(file_name1);
    File data_to_check = new File(file_name2);

    Scanner input = new Scanner(System.in); // Create a Scanner object

    println("Enter hashTable size");
    int hashTable_size = input.nextInt(); // Read hashTable_size from user

    println("Enter num of hashing function");
    int num_of_has = input.nextInt(); // Read num of hashing from user

    hashTable T = new hashTable(hashTable_size);
    println("hashTable before insert values\n");
    T.printHashTable();
    input.close();

    int i = 0;
    try {
      input = new Scanner(data_to_insert);
      String data;
      while ((data = input.next()) != null) {
        T.set(i, Integer.parseInt(data));
        i++;
      }
      input.close();
    } catch (Exception e) {
      System.out.println("\nError: Reading, An error occurred while reading input files. Check your input type");
      e.printStackTrace();
    }
    T.printHashTable();
  }
} 

这是我的输出

打印捕获错误

hashTable before insert values

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

Error: Reading, An error occurred while reading input files. Check your input type
java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1478)
        at main.main(main.java:36)
[1,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

这一行,

while ((data = input.next()) != null) 

如果没有更多数据,Scanner 的 next() 方法不会 return null,而是抛出您得到的 NoSuchElementException。

改用它来检查更多数据:

while ((input.hasNext()) {
    data = input.next();
    //...
}

方法 hasNext() return如您所料是对还是错。