从我在Java中读取文件时中断的地方开始

从我在Java中读取文件时中断的地方开始,java,line,Java,Line,我试图从一个文件中读取信息,并用这些信息创建对象。文件的每6行左右是一个不同的单位,这意味着第一组行与对象a相关,下一组与对象B相关,依此类推 我可以从文件中读取并创建我的对象——对于第一组。我的问题是,在创建下一个对象时,我不知道如何让读者从它离开的地方开始阅读 (注意:创建文件的read()方法是正在创建的新对象的一部分,而不是main()或类似的方法)。以下是相关的代码位: 司机: public class CSD{ public static void main (String

我试图从一个文件中读取信息,并用这些信息创建对象。文件的每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():


提前谢谢你们,伙计们

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

javadoc:

示例代码:

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

一个是Object*流——您在一个文件上创建一个ObjectStream,然后通过它写入对象。稍后,当你阅读时,你会按照你写的相反顺序阅读对象,它们会像你写的一样返回

另一个是实现可序列化。还记得那个短暂的关键词吗?在不希望保存到文件的字段上使用它

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

编辑: 使用Object*Streams编写guess需要实现可序列化或可外部化


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

为什么不将起始行号也传递给每个构造函数?否则,最好只读取一个文件,同时创建所有对象,将这些值传递给构造函数。Agree。否则,看看这里:乔尔,我如何让读者从“我会通过它”开始?这是个好主意,我如何实现它?为什么不只读取一个文件,然后将值传递给构造函数呢?那要有效得多。。否则,只需执行readLine()并忽略内容,直到到达给定行。将重要行号从main传递给构造函数。。我不知道你为什么会那样做。。这是一个糟糕的面向对象编程的实现。你能解释一下这些吗?我不太精通阅读方法。我将开始在谷歌上搜索这些术语,但如果你能解释/给出一个小例子,那将非常有用。。。
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;
}