1

我正在尝试从文件中读取信息并根据该信息创建对象。文件的每 6 行左右是一个不同的单元,这意味着第一组行与对象 A 相关,下一组与对象 B 相关,依此类推。

我可以从文件中读取并创建我的对象——对于第一组。我的问题是,我不知道如何让读者在创建下一个对象时从它离开的地方继续阅读......

(注意:创建文件的 read() 方法是正在创建的新对象的一部分,而不是在 main() 或类似的东西中)。以下是相关的代码:

司机:

public class CSD{

    public static void main (String[] argv){
        Vector V=new Vector(10);
        CoS jon=new CoS();
        jon.display();
    }//end main
}

它调用 CoS,其构造函数是:

public CoS(){
    try{
        String fileName=getFileName();
        FileReader freader=new FileReader(fileName);
        BufferedReader inputFile=new BufferedReader(freader);
        this.read(inputFile);
        setDegree(major);
        setStatus(credits);
    } catch(FileNotFoundException ex){
    }//end catch
}

它同时调用 read() 和 getFileName():

public void read(BufferedReader inputFile){
    try{
        int n;
        super.read(inputFile);
        String str=inputFile.readLine();
        if (str!=null){
            n=Integer.parseInt(str);
            setCredits(n);
            str=inputFile.readLine();
            setMajor(str);
        }//end if
    }catch(IOException ex){}
}//end method

public String getFileName() {
    Scanner scan = new Scanner(System.in);
    String filename;
    System.out.print("Enter the file name and path ==> ");
    filename = scan.nextLine();
    System.out.println("");
    return filename;
}

提前谢谢各位!

4

1 回答 1

3

为什么不使用 ObjectInputStream 和 ObjectOutputStream?或者任何一种真正的序列化?

javadoc:http ://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html

示例代码:http ://www.javadb.com/writing-objects-to-file-with-objectoutputstream

基本上,由于您将对象写入文件并希望处理它们所在的行,因此我将建议其他一些序列化替代方案。

一个是 Object * Stream - 您在文件上创建一个 ObjectStream 并通过它写入对象。稍后,当您阅读时,您会以与您编写对象相反的顺序阅读对象,并且它们会像您编写它们一样返回。

另一种是实现 Serializable。还记得那个瞬态关键字吗?在您不想保存到文件的字段上使用它。

然后是原始的“手动”方法,您只保存要保存的内容,稍后通过将这些初始化值传递给它们的构造函数来重建对象。有点像人们建议您将文件行作为ctor的参数:)

编辑:猜测使用 Object*Streams 编写需要您实现 Serializable 或 Externalizable。

但如果示例代码不够清晰,请询问:)

于 2012-10-31T17:57:21.753 回答