0

Я хочу знать, что было бы лучшим способом сохранить объекты в файле? Сохраняя в этом смысле, объекты должны быть добавлены. Когда я искал в Интернете, я обнаружил, что printwriter сохраняет объект в формате его метода toString, но если он сохраняет объект в файле в формате toString, как программа может использовать его для доступа к экземпляру объекта. Что я имею в виду, если я сохраняю объект-ученик в текстовом файле с использованием printwriter (у объекта есть имя, id и возраст), как я могу использовать его в будущем для сравнения возраста одного студента с возрастом другого ученика/поиск по идентификатору и т. д. Поскольку объект сохраняется в виде строки, его можно читать только как строку, так как я могу получить доступ к экземплярам объекта?Лучший способ записи объектов в текстовый файл

Другой метод, который я узнал, - это сериализация. Сериализация выглядит так, как будто она выполняет эту работу, но потом я узнал, что она не может добавлять объекты к файлу, потому что заголовок потока продолжает преобладать. Есть ли способ добавления объектов в файл с помощью сериализации?

В настоящее время это единственные 2 метода, которые я обнаружил для записи объектов, но, похоже, я не могу использовать какой-либо из этих методов, поскольку при сохранении с помощью printwriter он будет считан как строка, и если я использую сериализацию, я могу хранить только один запись.

Спасибо за ваше время.

+0

Вы изучали JSON? – hexafraction

+0

Вы должны попробовать 'HIBERNATE'. –

+1

@VimalBera Для текстового файла? Не самая лучшая идея, обязательно – hexafraction

ответ

2

JAXB будет отличным выбором для вас, как я вижу из описания проблемы. Here - простой пример для начала.

JAXB является частью стандартного JDK с 1,6, поэтому вам не нужны никакие дополнительные библиотеки. Также поддерживает сериализацию коллекций, поэтому вы можете легко реализовать свою задачу «добавить».

1

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

Кроме того, сохранение файлов в файл как XML позволит другим языкам обрабатывать один и тот же файл.

1

Почему бы не использовать FileOutputStream вместо PrintWriter и просто записать данные в файл в режиме добавления? FileOutputStream имеет конструктор режима добавления.

1

Как о перекрытии writeStreamHeader и сбросить?

ObjectOutputStream ooStream = null; 
try{ 
    ooStream = new ObjectOutputStream(new FileOutputStream("object-writer")); 
    ooStream.writeObject(new ObjectWriter()); 
} catch(Exception ex){ 
    ex.printStackTrace(); 
} finally { 
    if(ooStream != null){ 
     try { 
      ooStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ObjectOutputStream ooStream2 = null; 

try{ 
    ooStream2 = new ObjectOutputStream(new FileOutputStream("object-writer", true)) { 
     @Override 
     public void writeStreamHeader() throws IOException { 
      reset(); 
     } 
    }; 
    ooStream2.writeObject(new ObjectWriter()); 
} catch(Exception ex){ 
    ex.printStackTrace(); 
} finally { 
    if(ooStream2 != null){ 
     try { 
      ooStream2.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ObjectInputStream oiStream = null; 
try { 
    oiStream = new ObjectInputStream(new FileInputStream("object-writer")); 
    System.out.println(oiStream.readObject()); 
    System.out.println(oiStream.readObject()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if(oiStream != null){ 
     try { 
      oiStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}