从Java中读取文件时离开的地方拾起

时间:2012-10-31 17:38:43

标签: java line

我正在尝试从文件中读取信息并从该信息中创建对象。文件的每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;
}

先谢谢你,伙计们!

1 个答案:

答案 0 :(得分: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 - 你在File上创建一个ObjectStream,只是通过它来编写对象。稍后当你阅读时,你按照你编写它们的相反顺序阅读对象,它们会像你写的那样回来。

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

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

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

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