在Java中将文本文件加载到对象中

时间:2014-10-11 04:37:19

标签: java java.util.scanner ioexception

我正在尝试编写一个类但遇到问题。我遇到的问题是我需要在文本文件中读取并将其从方法中返回。我遇到了很多错误。有人可以帮我这个吗?

文本文件如下所示

问题1

答案1

问题2

回答2

问题3

回答3

...

等。

import java.io.*;
import java.util.*;

public class Quiz {

    private String fName; // Name of the file you will be reading from
    private Scanner theFile; // Scanner use to read from the file
    public int status = 0;
    public String line = null;
    public int i = 0;

    // Create a new Quiz object by opening the associated file. Note that this
    // method throws an IOException, so in the method that calls it you must
    // also
    // have in the header "throws IOException". We will discuss how to handle
    // these exceptions later.
    public Quiz(String f) throws IOException {

        File Quiz = new File(f);
        Scanner theFile = new Scanner(Quiz);
        theFile.close();
        return Quiz;
    }

    // First check the status. If it is 1 or 2 simply return false.
    // If it is 0, check the file:
    // If there is a line in the file, return true
    // If there is no line in the file, set status to 1 and
    // return false.
    public boolean hasAQuestion() {
        if (status == 1 || status == 2) {
            return false;
        }
        else if (status == 0) {
            if (line = theFile.readLine() != null) {
                return true;
            }
            else if (line = theFile.readLine() == null) {
                status = 1;
                return false;
            }
        }
    }

    // Return that status of the Quiz object:
    // Status = 0: everything ok
    // Status = 1: end of file reached
    // Status = 2: error has occurred
    public int getStatus() {
        if (line = theFile.readLine() != null) {
            status = 0;
        }
        else if (line = theFile.readLine() == null) {
            status = 1;
        }
        else if (line.theFile.readLine() == " ") {
            status = 2;
        }
        return status;
    }

    // Get the next question and set the status appropriately:
    // If status is not 0, return null, otherwise:
    // If no lines are left before anything is read, set status
    // to 1 and return null
    // If the question is read but no answer left, set status to
    // to 2 and return null
    // If both the question and answer are read, return them in
    // a new Question object.

    public Question getQuestion() {
        return null;
    }
}

2 个答案:

答案 0 :(得分:1)

嗯,首先,

File Quiz = new File(f);

不是一个好习惯。 Quiz是类的名称。 File也是一个类的名称。如果要创建File对象,请执行以下操作:

File quizFile = new File(f);

您不应该在 Quiz构造函数中创建一个Quiz对象,因为构造函数将调用Quiz构造函数......并且您会遇到无限循环。这可能只是一个命名错误,但请记住不要使用大写字母启动变量名称,并且还要避免在Quiz类中使用文件对象名称测验,因为这会导致一些混淆。

所以无论如何你的错误来自这一行:

theFile.close();

您刚刚在此处执行的操作是您创建了一个Scanner对象,打开一个流以从文本文件中读取,然后将其关闭。所以现在你不可能从文件中读取,因为你刚刚关闭了你的流。对此的解决方案是在Quiz类中使用close()方法,一旦从文件中读取,就会被其他类调用。

最后,

return Quiz;

构造函数不返回任何内容。他们只是构造了一个类的对象。另外,我并不完全确定,但你可能会对类是什么和对象是什么感到困惑。一个类就像一个对象的模板;对象可以执行的操作以及它具有的属性由类定义。例如,在声明中

Cat bob = new Cat();

您正在创建Cat。类的对象(bob)。

语句return Quiz;,即使它不在构造函数中,也没有任何意义,因为您返回而不是对象。如果你想要一个静态方法来返回一个对象,那么它应该是

的行
return new Cat();

不     返回Cat;

答案 1 :(得分:0)

public Quiz(String f) throws IOException
{

    File Quiz = new File(f);
    Scanner theFile = new Scanner(Quiz);
    theFile.close();
    return Quiz;
}

你试图从构造函数中返回一个对象,但你不能这样做。

此外,theFile.readLine() - Scanner没有readLine()方法,只有nextLine()