Как мне взять массив объектов и обновить файл данных объекта после изменения переменных в массиве?

У меня есть массив объектов, и я пытаюсь изменить значения объектов, а затем повторно обновить файл хранилища, где хранятся объекты в файле. Когда я пытаюсь изменить файл хранилища, он либо очищает файл, либо ничего не делает. Вот мой код..

public class InventoryManager implements Serializable{

String name;
String code;
double price;
int inventory;
String expireDate;
boolean frozen;
String type;
int shoeSize;
double screenSize;
boolean medical;
Object myObject;


Controller l;

FileOutputStream storage = new FileOutputStream("Storage.dat");
ObjectOutputStream out = new ObjectOutputStream(storage);

Pharmacy ph;
TVS tv;
Shoes shoe;
Fruit fruit;

Scanner input = new Scanner(new File("inp.dat"));


public InventoryManager(Object x) throws IOException{

    myObject = x;


    if(x instanceof Item){
        name = ((Item) x).getName();
        code = ((Item) x).getCode();
        price = ((Item) x).getPrice();
        inventory = ((Item) x).getInventory();

        }

    out.writeObject(x);
    out.close();
}

public class Controller implements ActionListener {

GUI myGui;
InventoryManager[] myManager;
JButton myButton;
int quantity;
String nameofproduct = "";

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub



    if(arg0.getSource() instanceof JButton){


        myButton = (JButton) arg0.getSource();
        String x = myButton.getText();

        for(int i = 0; i<myManager.length; i++){
            if(x.equals(myManager[i].name)){
                nameofproduct = myManager[i].name;
            }
        }

        if(x.equals("Purchase")){
            try{
                quantity = Integer.parseInt(myGui.qtnInput.getText());
            if(nameofproduct == ""){
                JOptionPane.showMessageDialog(null, "Select a Product");
            }
            else{

                for(int i = 0; i<myManager.length; i++){
                    if(nameofproduct.equals(myManager[i].name)){

                        myManager[i].inventory = myManager[i].inventory - quantity;
                        myGui.qtnLeft.setText("Quantity: "+myManager[i].inventory);
                        myGui.CartInv.setText(myGui.CartInv.getText() + myManager[i].name + " " + quantity+"\n");
                        myGui.description.setText(myManager[i].toString());

                        }
                    }



                }



            }
            catch(NumberFormatException e){
                JOptionPane.showMessageDialog(null, "That is not a number");
                myGui.qtnInput.setText("");
            }
        }

        for(int i = 0; i<myManager.length; i++){
            if(x.equals(myManager[i].name)){
                myGui.qtnLeft.setText("Quantity: "+myManager[i].inventory);
                myGui.description.setText(myManager[i].toString());
            }
        }


    }


}


}

public void getIM(InventoryManager[] myManager){
    this.myManager = myManager;
}

}

1 ответ

Отображение байтов в файле в виде блоков LegoTM на базовой плате, каждый из которых расположен близко друг к другу.

Если вы хотите изменить некоторые блоки посередине, вы должны переместить все блоки после измененной позиции и переместить их назад на количество байтов, в которых измененная часть контента длиннее старой.

Почти то же самое верно для байта на вашем жестком диске.

Это означает, что самый простой способ - переписать весь файл.

Другие вопросы по тегам