我有一个用户定义的类,比如说
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,我更愿意。感谢。
答案 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界面的文档以及ObjectInputStream和ObjectOutputStream。您可能还想通过阅读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();