2017-09-30 3 views
1

私のコード例では、たくさんのコードがあります。テキストファイルから文字列データを取得し、オブジェクトにパックを格納します

しかし、この問題は、(コードの最後の)restoreCourseメソッド内にあります。ここでは、(StorageManagerから取得した)すべてのデータを文字列配列(lineBuffer)にリストアしてからそのデータを使用してクラスCourseのオブジェクトを復元し、メソッドの最後にそれを返します。

public class Course { 

private String name; 
private int courseID; 
private String signUpCode; 
private String courseGuide; 
private String courseScheme; 
private String courseGrade; 
private String courseSpeed; 
private String courseCredit; 

public Course(String name,int courseID,String signUpCode, 
     String courseGuide,String courseScheme,String courseSpeed,String 
courseCredit){ 
    this.name = name; 
    this.courseID = courseID; 
    this.signUpCode= signUpCode; 
    this.courseGuide = courseGuide; 
    this.courseScheme = courseScheme; 
    this.courseSpeed = courseSpeed; 
    this.courseCredit = courseCredit; 
    this.courseGrade = ""; 
} 
public int getCourseID(){ 
    return courseID; 
} 
public String getCourseName(){ 
    return name; 
} 
public String getSignUpCode(){ 
    return signUpCode; 
} 
public String getCourseScheme(){ 
    return courseScheme; 
} 
public String getCourseGuide(){ 
    return courseGuide; 
} 
public String getCourseGrade(){ 
    return courseGrade; 
} 
public String getCourseSpeed(){ 
    return courseSpeed; 
} 
public String getCourseCredit(){ 
    return courseCredit; 
} 

@Override 
public String toString() { 

    StringBuffer msg = new StringBuffer(); 
    msg.append (courseID); 
    msg.append ("-"); 
    msg.append (name); 
    msg.append ("-"); 
    msg.append (signUpCode); 
    msg.append ("-"); 
    msg.append (courseGuide); 
    msg.append ("-"); 
    msg.append (courseScheme); 
    msg.append ("-"); 
    msg.append (courseGrade); 
    msg.append ("-"); 
    msg.append (courseSpeed); 
    msg.append ("-"); 
    msg.append (courseCredit); 
    msg.append ("\n"); 
    return msg.toString(); 
} 
} 


public class FileCourseDAO implements CourseDAO { 

public void saveCourse(Course course){  

    StringBuffer dataBuffer = new StringBuffer(); 
    dataBuffer.append (course.getCourseID()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseName()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getSignUpCode()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseGuide()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseScheme()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseGrade()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseSpeed()); 
    dataBuffer.append ("-"); 
    dataBuffer.append (course.getCourseCredit()); 
    dataBuffer.append ("\n"); 

    StorageManager packer = StorageManager.getInstance(); 

    try { 
     packer.storeStringData (dataBuffer.toString().trim()); 
    } catch (IOException e){ 
     System.out.println ("Storage manager Error:"); 
     e.printStackTrace(); 
    } 
} 


public Course restoreCourse(int courseID){ 
    StorageManager packer = StorageManager.getInstance(); 

    if (!packer.storeExists()){ 
     System.out.println ("No file with data."); 
     return; 
    } 
    try { 
     String[] lineBuffer = null; 
     List<String> dataBuffer = packer.readData(); 

     for (String dataLine : dataBuffer){ 
      lineBuffer = dataLine.split(" "); 
     } 



    Course course = new Course(); 

    } catch (IOException e) { 
     System.out.println ("Error while reading data file."); 
    } 
    return course; 
} 
} 
+0

ようこそ!あなたは、不必要なコードをたくさん持たなければならないようです。[Minimal、Complete、and Verifiable example](https://stackoverflow.com/help/mcve)を投稿してください –

+0

あなたが直面している問題は何ですか – Subhiksh

+0

私はしたいと思いますメソッド "saveCourse"をテキストファイルとして保存したオブジェクトを復元し、メソッド "restoreCourse"を使用してオブジェクトを返します。 – AdamBergstroem

答えて

0

Iは、(テキストファイルとしてIメソッド内に保存することを「saveCourse」)オブジェクトを復元したいと方法「restoreCourse」を用いて、オブジェクトを返すことになります。

方法で
  • saveCourseあなたは-で区切らもちろんフィールド連載しました。その文字列を分割するときは、dataLine.split(" ")の代わりにdataLine.split("-")を使用する必要があります。
  • Courseクラスのインスタンスを作成し、初期化せずにインスタンスを返します。分割後、これらのデータを使用してコースオブジェクトを初期化し、呼び出し元に返します。次のコードはうまくいくかもしれない

public Course restoreCourse(int courseID){ 
    StorageManager packer = StorageManager.getInstance(); 

    if (!packer.storeExists()){ 
     System.out.println ("No file with data."); 
     return; 
    } 
    Course course = null; 
    try { 
     String[] lineBuffer = null; 
     List<String> dataBuffer = packer.readData(); 

     for (String dataLine : dataBuffer){ 
      lineBuffer = dataLine.split("-"); 
      if (lineBuffer.length > 7 && courseID == lineBuffer[0]) { 
       course = new Course(lineBuffer[1],lineBuffer[0],lineBuffer[2], lineBuffer[3],lineBuffer[4],lineBuffer[6],lineBuffer[7]); 
      } 
     } 
    } catch (IOException e) { 
     System.out.println ("Error while reading data file."); 
    } 
    return course; 
} 

注: (彼らは同じ順序ではない)コンストラクタのパラメータの順序の世話をしてsaveCourse()方法でフィールドの順序。私はそれらを一致させようとしましたが、正しい順序であるかどうかを確認してください。

+0

ありがとう!それはコードをもっと良くしました。また、整数(メソッドがとるパラメータ)を文字列に変換したので、ラインバッファで見つけることができます。それをCourseコンストラクタに追加する前に再び整数に再変換しました。 しかし、テキストファイル内に10種類のオブジェクトを格納すると仮定した場合、整数のインデックスを特定し、そのオブジェクトの他の6つのインデックスをすべて取得する方法はありますか?それはコースのコンストラクタ内に配置され、それを返す前に配置されます。 – AdamBergstroem

+0

申し訳ありませんが、私はその質問を理解していません。 '整数のインデックス 'はどういう意味ですか? – ujulu

+0

Courseクラスの各オブジェクトには、courseID(これは整数)があります。今、クラスコースの10個のオブジェクトをテキストファイルの中に保存していれば、(courseIDの助けを借りて)特定のオブジェクトを復元したいだけです。その特定のcourseID番号を、そのオブジェクトに属する残りの属性とともにどのようにして見つけ出し、オブジェクトを復元するのですか?あなたが私に与えたコード例では、テキストファイル内のオブジェクトは1つだけと仮定していますが、10個の異なるオブジェクトがある場合は想像してください。 – AdamBergstroem

関連する問題