Модификация объектов в двоичном файле - PullRequest
0 голосов
/ 17 октября 2019

Учитывая, что у меня есть объект из пользовательского класса, и я записываю его в файл .dat, используя FileOutputStream и ObjectOutputStream. Как я могу изменить объект, присутствующий в файле? Я могу только читать или записывать объекты в файл ... Я знаю, что мы можем создать временный файл и затем переименовать файл соответствующим образом, но нет ли другого способа?

Я получаю выходные данные, как и ожидалось, но это не такЕсть ли другой метод?

1 Ответ

0 голосов
/ 17 октября 2019

Да, вы можете сделать это, используя FileOutputStream & ObjectOutputStream class

 class MyBean {
   public String firstvalue;
   public String secondvalue;
   public MyBean (String firstvalue,String secondvalue){
     this.firstvalue=firstvalue;
     this.secondvalue=secondvalue;
  }

}
public class FileSerialization {

    public static void main(String[] args) {

        try {
            MyBean mb = new MyBean("first value", "second value");

            // write object to file
            FileOutputStream fos = new FileOutputStream("mybean.dat");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(mb);
            oos.close();

            // read object from file
            FileInputStream fis = new FileInputStream("mybean.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);
            MyBean result = (MyBean) ois.readObject();
            ois.close();

            System.out.println("One:" + result.firstvalue + ", Two:" + result.secondvalue);
          result.firstvalue="Changed;";

          // write object to file
            fos = new FileOutputStream("mybean.dat");
            oos = new ObjectOutputStream(fos);
            oos.writeObject(result);
            oos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}
...