我正在读取文件并将其复制到数组中。我的文件有五行文字,每行一个句子。我的输出“数组大小是5”,但之后没有。如果我确实添加了数组的打印行,它会给我5个空值...
有人可以帮助解释我做错了什么吗?谢谢!
public static int buildArray() throws Exception
{
System.out.println("BuildArray is starting ");
java.io.File textFile; // declares a variable of type File
textFile = new java.io.File ("textFile.txt"); //reserves the memory
Scanner input = null;
try
{
input = new Scanner(textFile);
}
catch (Exception ex)
{
System.out.println("Exception in method");
System.exit(0);
}
int arraySize = 0;
while(input.hasNextLine())
{
arraySize = arraySize + 1;
if (input.nextLine() == null)
break;
}
System.out.println("Array size is " + arraySize);
// Move the lines into the array
String[] linesInRAM = new String[arraySize];// reserve the memory
int count = 0;
if (input.hasNextLine())
{
while(count < arraySize)
{
System.out.println("test");
linesInRAM[count] = input.nextLine();
System.out.println(linesInRAM[count]);
count = count + 1;
}
}
答案 0 :(得分:0)
在此代码中
int count = 0;
if (input.hasNextLine())
上面的hasNextLine
将始终为false,因为您已经阅读了整个文件。
将扫描仪重置为文件的开头,或使用动态列表,例如ArrayList
将元素添加到。
答案 1 :(得分:0)
我的Java有点生疏,但我的答案的基本要点是你应该创建一个新的Scanner对象,以便它再次从文件的开头读取。这是“重置”到开头的最简单方法。
您的代码目前无法正常工作,因为当您致电input.nextLine()
时,您实际上正在递增扫描仪,因此在第一个while()
循环结束时input
位于最后该文件,因此当您再次致电input.nextLine()
时,它会返回null
。
Scanner newScanner = new Scanner(textFile);
然后在代码的底部,你的循环应该是这样的:
if (newScanner.hasNextLine())
{
while(count < arraySize)
{
System.out.println("test");
linesInRAM[count] = newScanner.nextLine();
System.out.println(linesInRAM[count]);
count = count + 1;
}
}