将用户定义的对象转换为String对象

时间:2012-01-02 10:52:44

标签: java string object

我有一个用户定义的类,比如说

import java.util.Calendar;

public class Employee{
    private String name;
    private int age;
    private Calendar dob;
    private Address address;
    private boolean married;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Calendar getDob() {
        return dob;
    }
    public void setDob(Calendar dob) {
        this.dob = dob;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public boolean isMarried() {
        return married;
    }
    public void setMarried(boolean married) {
        this.married = married;
    }
}
class Address{
    private int doorNo;
    private String streetName;
    private String city;
    public int getDoorNo() {
        return doorNo;
    }
    public void setDoorNo(int doorNo) {
        this.doorNo = doorNo;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
}

我正在创建一个Employee对象并用setter填充它。我必须将上述对象表示为字符串(加密或人类可读)并解析回来获取类似对象。实际上,我想在文件中保存相当于java对象的字符串并回读它们以获取java对象。我知道我们有对象写作,但他们对编辑很敏感。如果java对象可以转换为人类可读形式的String,我更愿意。感谢。

4 个答案:

答案 0 :(得分:3)

您应该覆盖toString()以将类的实例转换为字符串。至于根据字符串表示重新创建实例,您可以为此定义静态工厂方法。

public class Employee {
  ...
  @Override
  public String toString() {
    ...
  }

  public static Employee fromString(String str) {
    ...
  }
}

您可以使用以下方法:

获取字符串实例的字符串表示形式:

Employee john = ...
String johnString = john.toString();

请注意,只要需要获取其中一个实例的字符串表示,您的toString()方法也会被隐式调用。

从字符串重新创建实例:

Employee john = Employee.fromString(johnString);

如果您经常需要将类的实例存储在文件中并将其读回,您还可以考虑序列化。请参阅Serializable界面的文档以及ObjectInputStreamObjectOutputStream。您可能还想通过阅读Effective Java, second edition中的最后一章(“序列化”)来熟悉有关序列化的警告。最重要的是要注意,您的类的序列化形式将成为您的公共API的一部分。

答案 1 :(得分:3)

为了保持您的展平对象的可读性和手动可编辑性,请考虑使用一个流行的JSON库将对象编码为JSON字符串。相同的JSON库还将为您提供API,以将JSON字符串解码为您的对象。

一个流行的JSON库是Gson。这是一个使用示例:Converting JSON to Java

答案 2 :(得分:2)

您可能正在寻找toString方法:

  

返回对象的字符串表示形式。一般来说,   toString方法返回一个“文本表示”的字符串   宾语。结果应该是简洁但信息丰富的表示   一个人很容易阅读。建议所有人   子类重写此方法。

在你的情况下,你会做某种事情(在你的每个班级中加入):

@Override
public String toString()
{
  return "Name = " + name + ...
}

字符串可以是您想要的任何格式。要保存对象,您需要做的就是将toString方法返回的文本写入文件。

然而,要回读它们,您必须实现自己的逻辑。另一方面,你可以做的是使用诸如XStream(指令here)之类的东西,它会自动将你的对象转换为XML。

XML是人类可读的,因此您的用户可以修改他们需要的任何内容。完成此操作后,您可以重新使用XStream来回读对象。

答案 3 :(得分:1)

试试这个

Employee em = new Employee;

//Your code

str obj= JavaScriptSerializer.Serialize();

// whenever you want to get object again

Employee emp = (Employee)JavaScriptSerializer.Deserialize();