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

基本的に、オブジェクトをファイルに書き込み、それらが配置されている行を処理したいので、他のいくつかのシリアライゼーションの代替案を提案します。

1 つは Object * Stream です。File に ObjectStream を作成し、それを介してオブジェクトを書き込むだけです。後で読むときは、オブジェクトを書いたのと逆の順序で読みます。オブジェクトは、書いたとおりに戻ってきます。

もう 1 つは、Serializable を実装することです。その一時的なキーワードを覚えていますか? ファイルに保存したくないフィールドで使用します。

そして、保存したいものだけを保存し、後でこれらの初期化値をコンストラクターに渡すことによってオブジェクトを再構築する生の「手動」アプローチがあります。ファイル行をctorへの引数にすることを人々が提案したようなものです:)

編集: Object*Streams で書くと推測するには、Serializable または Externalizable を実装する必要があります。

しかし、サンプルコードが十分に明確でない場合は、質問してください:)

于 2012-10-31T17:57:21.753 に答える