尝试将文件写入数组 - 获取 NoSuchElementException

Trying to write a file to an Array - getting NoSuchElementException

(为此,我需要使用数组——而不是数组列表。删减代码以使其更易于理解。将变量和常量重命名为标签,以便稍后阅读本文的其他人更好地理解我在做什么。)

在 class 级别,我的数组定义如下:

private static final int CONSTANT = 20;
public static String[] arrayName = new String[CONSTANT - 1];

在主要方法中,我指向这样的方法:

readArrays("filenName.txt", arrayName);

像这样的一行指向以下完整方法,这是错误发生的地方:

    public static void readArrays(String codeFile, 
                                 String[] Arrays)
 {        

   try ( Scanner fin = new Scanner ( new File(codeFile) ); ) 
    {
     for (int i = 0; i < CONSTANT - 1; i++) 
          {
          Arrays[i] = fin.next();
          }
    }
    catch (FileNotFoundException e) 
    {
        System.err.println( "Read Error: " + e.getMessage() );
    }

它在 NetBeans 中没有显示错误,但在控制台中 window 确切的错误消息是:

 run:
 Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at mp06.Main.readArrays(Main.java:47)
    at mp06.Main.main(Main.java:33)
 Java Result: 1
 BUILD SUCCESSFUL (total time: 0 seconds)

导致此错误的原因是什么?最终,我的目标是使用相同的方法将多个文本文件的全部内容写入多个数组,而不使用任何其他方法。

    try ( Scanner fin = new Scanner ( new File(codeFile) ); ) 
    {
     for (int i = 0; i < CONSTANT - 1 && fin.hasNext(); i++) 
          {
          Arrays[i] = fin.next();
          }
    }
    catch (FileNotFoundException e) 
    {
        System.err.println( "Read Error: " + e.getMessage() );
    }

您还需要检查 扫描仪 有下一个。

Java8中,可以使用stream 读取文件:

List<String> contents = Files.lines(Paths.get("filenName.txt")).collect(Collectors.toList());

以下代码可能对您有所帮助。 有几件事,你必须在调用 next() 之前检查扫描仪中是否存在下一个元素,另一个是常量“20”,如果大小超过 20,它将以 Array Index Bounds 异常结束。

将它们添加到列表中并将它们转换为数组将解决此问题。试试下面的代码。

    List<String> list = new ArrayList<String>(); 
    while (fin.hasNext()) {
        list.add(fin.next());
    }

    String[] array = new String[list.size()];
    list.toArray(array);

    for (String str: array) {
        System.out.println(str);
    }