【问题标题】:Retrieve String data from a textfile and store it pack to an object从文本文件中检索字符串数据并将其存储到对象中
【发布时间】:2018-03-12 04:33:38
【问题描述】:

在我的代码示例中,您将看到很多代码。

但是,问题在于 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;
}
}

【问题讨论】:

  • 欢迎来到 Stackoverflow!您似乎必须有很多不必要的代码。请发Minimal, Complete, and Verifiable example
  • 您面临的问题是什么
  • 我想恢复对象(我保存在方法“saveCourse”中作为文本文件)并使用方法“restoreCourse”返回对象。

标签: java string while-loop dao


【解决方案1】:

我想恢复对象(我保存在方法“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()方法中构造函数参数的顺序和字段的顺序(它们的顺序不同);我试图匹配它们,但请检查它们的顺序是否正确

【讨论】:

  • 谢谢!它使代码变得更好。我还将整数(方法采用的参数)转换为字符串,因此您可以在 linebuffer 中找到它。然后在将其添加到 Course 构造函数之前再次将其重新转换为整数。但是,如果我们假设我们在文本文件中存储了 10 个不同的对象,您将如何识别整数的索引,然后检索该对象的所有其他 6 个索引?在返回之前,它将被放置在 Course 的构造函数中。
  • 对不起,我不明白这个问题。 index of the integer 是什么意思?
  • Course 类的每个对象都有一个 courseID(即整数)。现在,如果我在一个文本文件中存储了 Course 类的 10 个对象,并且我只想恢复一个特定对象(借助 courseID)。您将如何找到该特定 courseID 编号以及属于该对象的其余属性,并恢复该对象。在您给我的代码示例中,我们假设文本文件中只有一个对象,但想象一下如果我们有 10 个不同的对象。
  • 在代码中我们不假设只有一个课程对象。查看for 循环。它遍历代表课程对象的所有行(这些可以是 10 或 20 或 100 ...),并仅选择将 courseID 传递给方法的行。循环中的ifstatement 正是这样做的。一旦我们找到属于courseID 的行,我们就创建一个Course 类的实例并返回它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
相关资源
最近更新 更多