Преобразовать пользовательский объект в строковый объект - PullRequest
1 голос
/ 02 января 2012

У меня есть определенный пользователем класс, скажем

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 и заполняю его сеттерами.Я должен представить вышеупомянутый объект в строку (в зашифрованном виде или для чтения человеком) и проанализировать, чтобы получить аналогичный объект.На самом деле, я хочу сохранить строковый эквивалент Java-объекта в файле и прочитать их обратно, чтобы получить Java-объект.Я знаю, что у нас есть записи объектов, но они чувствительны к редактированию.Я бы предпочел, чтобы объект Java мог быть преобразован в строку в читаемой человеком форме.Спасибо.

Ответы [ 4 ]

3 голосов
/ 02 января 2012

Чтобы ваш плоский объект читался человеком и редактировался вручную, подумайте о кодировании вашего объекта в строку JSON с помощью одной из популярных библиотек JSON.Та же библиотека JSON также предоставит вам API для декодирования строки JSON в ваш объект.

Одной из популярных библиотек JSON является Gson .Вот пример использования: Преобразование JSON в Java

3 голосов
/ 02 января 2012

Вы должны переопределить 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);

Если вам часто нужно хранить экземпляры класса в файле и читать их обратно, вы можете также рассмотреть возможность сериализации.См. Документацию для Сериализуемый интерфейс, а также ObjectInputStream и ObjectOutputStream .Вы также можете ознакомиться с предостережениями, связанными с сериализацией, прочитав последнюю главу («Сериализация») в Effective Java, второе издание .Наиболее важно знать, что сериализованная форма вашего класса становится частью вашего публичного API.

2 голосов
/ 02 января 2012

Возможно, вы ищете метод toString :

Возвращает строковое представление объекта. В общем, Метод toString возвращает строку, которая «представляет собой текст» объект. Результат должен быть кратким, но информативным это легко для человека, чтобы читать. Рекомендуется, чтобы все подклассы переопределяют этот метод.

В вашем случае вы будете делать что-то в этом роде (будет добавлено в каждый из ваших классов):

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

Строка может быть любого формата, который вы пожелаете. Чтобы сохранить объект, все, что вам нужно сделать, это написать текст, который метод toString возвращает в файл.

Однако, чтобы прочитать их обратно, вам придется реализовать свою собственную логику. С другой стороны, вы можете использовать что-то вроде XStream (инструкции здесь ), которое автоматически преобразует ваш объект в XML.

XML читается человеком, поэтому ваши пользователи могут изменять все, что им нужно. Как только это будет сделано, вы можете повторно использовать XStream для считывания вашего объекта.

1 голос
/ 02 января 2012

Попробуйте это

Employee em = new Employee;

//Your code

str obj= JavaScriptSerializer.Serialize();

// whenever you want to get object again

Employee emp = (Employee)JavaScriptSerializer.Deserialize();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...