从文本文件读取到数组 - 获取" nulls"

时间:2014-10-22 02:50:07

标签: java arrays

我正在读取文件并将其复制到数组中。我的文件有五行文字,每行一个句子。我的输出“数组大小是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;
                }
            }

2 个答案:

答案 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;
            }
    }