Как мне взять массив объектов и обновить файл данных объекта после изменения переменных в массиве?
У меня есть массив объектов, и я пытаюсь изменить значения объектов, а затем повторно обновить файл хранилища, где хранятся объекты в файле. Когда я пытаюсь изменить файл хранилища, он либо очищает файл, либо ничего не делает. Вот мой код..
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 на базовой плате, каждый из которых расположен близко друг к другу.
Если вы хотите изменить некоторые блоки посередине, вы должны переместить все блоки после измененной позиции и переместить их назад на количество байтов, в которых измененная часть контента длиннее старой.
Почти то же самое верно для байта на вашем жестком диске.
Это означает, что самый простой способ - переписать весь файл.