Java 将用户定义的对象转换为字符串对象

Java 将用户定义的对象转换为字符串对象,java,string,object,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;

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

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对象是否可以转换为人类可读形式的字符串。谢谢。

您应该重写
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);

如果您经常需要将类的实例存储在文件中并读取它们,也可以考虑序列化。有关接口以及和,请参阅文档。您可能还想通过阅读中的最后一章(“序列化”),熟悉有关序列化的注意事项。最重要的是,请注意,类的序列化形式将成为公共API的一部分。

您应该重写
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);

如果您经常需要将类的实例存储在文件中并读取它们,也可以考虑序列化。有关接口以及和,请参阅文档。您可能还想通过阅读中的最后一章(“序列化”),熟悉有关序列化的注意事项。最重要的是,请注意,类的序列化形式将成为公共API的一部分。

您可能正在寻找以下方法:

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

在您的情况下,您将做类似的事情(添加到每个类中):

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

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


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

您可能正在寻找以下方法:

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

在您的情况下,您将做类似的事情(添加到每个类中):

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

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


XML是人类可读的,因此用户可以根据需要修改任何内容。一旦完成这一操作,就可以重新使用XString来读取对象。

< P>让扁平化的对象保持可读性和可手工编辑性,考虑使用一个流行的JSON库将对象编码成JSON字符串。同一个JSON库还将为您提供API,用于将JSON字符串解码到您的对象中


流行的JSON库之一是。下面是一个使用例子:

让你扁平化的对象可读和手工编辑,考虑使用一个流行的JSON库将你的对象编码成JSON字符串。同一个JSON库还将为您提供API,用于将JSON字符串解码到您的对象中

流行的JSON库之一是。下面是一个使用示例:

试试这个

Employee em = new Employee;

//Your code

str obj= JavaScriptSerializer.Serialize();

// whenever you want to get object again

Employee emp = (Employee)JavaScriptSerializer.Deserialize();
试试这个

Employee em = new Employee;

//Your code

str obj= JavaScriptSerializer.Serialize();

// whenever you want to get object again

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

你需要的是序列化..JSON是你的出路,请检查下面的示例代码我的答案。谢谢大家!我把所有答案都投了赞成票!感谢您的热烈响应。您需要的是序列化..JSON是您的出路,请检查下面的示例代码我的答案。谢谢大家!我把所有答案都投了赞成票!感谢您的热烈响应。toString()方法可以表示一个对象,但是可以读回它们吗?此外,我还有Calendar对象和另一个用户定义的对象。所以很难实现我们自己的方法。是否有可用的API来执行此操作?非常感谢。对于从字符串表单重新创建实例,我建议使用静态工厂方法
fromString()
。我已经添加了如何使用这两种方法的演示。对于日历实例,您可以根据
toString()
生成的字符串中存储的内容重新创建它们(您必须输入足够的信息以允许