在java中按顺序读取数据

时间:2016-05-25 19:42:42

标签: java

我认为问题在于我的文本文件,但我无法理解?请帮助解决这个问题。 提前谢谢..

这是我的测试文件:

/*
##Question##
Which is not a JDK component?

##Ans1##
Java SE libraries

##Ans2##
Java SE libraries2

##Ans3##
Java SE libraries3

##Ans4##
Java SE libraries4 

*/

这是我的代码:

public class QuesSheet {

    String strQues;
    String[] ansQues = new String[4];

    public void testRead() {

        try {
            Scanner scReader = new Scanner(new File("mocTest.txt"));

            while (scReader.hasNext()) {
                if (scReader.nextLine().equals("##Question##")) {
                    strQues = scReader.nextLine();
                    // System.out.println(str);
                } else if (scReader.nextLine().equals("##Ans1##")) {
                    ansQues[0] = scReader.nextLine();
                } else if (scReader.nextLine().equals("##Ans2##")) {
                    ansQues[1] = scReader.nextLine();
                } else if (scReader.nextLine().equals("##Ans3##")) {
                    ansQues[2] = scReader.nextLine();
                } else if (scReader.nextLine().equals("##Ans4##")) {
                    ansQues[3] = scReader.nextLine();
                }

            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(QuesSheet.class.getName()).log(Level.SEVERE, null, ex);

        }
    }

    public static void main(String[] args) {
        QuesSheet qs = new QuesSheet();
        qs.testRead();
        System.out.println(qs.ansQues[0]);
        System.out.println(qs.ansQues[1]);//Why this is not working?? result show s null in both.
        System.out.println(qs.ansQues[2]);//and also same to this??
        System.out.println(qs.ansQues[3]);
    }
}

1 个答案:

答案 0 :(得分:1)

好的,我想我知道你的问题是什么。在你的while循环中,你有一个if else部分,你从文本文件中读取一行,并检查它是哪个部分:

while (scReader.hasNext()) {
    if (scReader.nextLine().equals("##Question##")) {
        strQues = scReader.nextLine();    
    } else if (scReader.nextLine().equals("##Ans1##")) {
        ansQues[0] = scReader.nextLine();
    } else if (scReader.nextLine().equals("##Ans2##")) {
        ansQues[1] = scReader.nextLine();
...etc

您需要意识到的是,每次调用scReader.nextLine()时,它都会向前移动文件中的读取位置。因此,超过第一个的if语句不会执行。

你需要做的是这样的事情:

while (scReader.hasNext()) {
    String line = scReader.nextLine();
    if (line.equals("##Question##")) {
        strQues = scReader.nextLine();    
    } else if (line.equals("##Ans1##")) {
        ansQues[0] = scReader.nextLine();
    } else if (line.equals("##Ans2##")) {
        ansQues[1] = scReader.nextLine();
...etc

现在,对于while循环的每次迭代,只会读取标题和下一行。