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

时间:2015-07-31 05:25:06

标签: java arrays nosuchelementexception

(为此我需要使用Arrays - 而不是Array列表。剪切代码以便更容易理解。将变量和常量重命名为标签,以便稍后阅读此内容的其他人了解我的工作做得更好。)

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

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中没有显示错误,但在控制台窗口中确切的错误消息是:

 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)

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

2 个答案:

答案 0 :(得分:3)

    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 中,您可以使用 来读取文件:

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

答案 1 :(得分:1)

以下代码可能会对您有所帮助。 有几件事情,你必须检查下一个元素是否存在于扫描器中才能调用next()而另一个元素是常量&#34; 20&#34;,如果是,则最终会出现Array Index Bounds异常大小超过20。

在列表中添加它们并将它们转换为数组将解决此问题。请尝试以下代码。

    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);
    }