问题描述
(为此,我需要使用数组-而不是数组列表。通过剪接代码可以使其更容易理解。重命名变量和常量以进行标记,以便以后阅读本文的其他人了解我在做什么。)
在类级别,我的数组定义如下:
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)
是什么导致此错误? 最终,我的目标是使用相同的方法,而不使用任何其他方法,将多个文本文件的全部内容写入多个数组。
1楼
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());
2楼
以下代码可能会对您有所帮助。 有几件事情,您必须在调用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);
}