如何在更改数组中的变量后获取对象数组并更新对象数据文件?

问题描述:

我有一个对象数组,我试图改变对象的值,然后重新更新存储对象的存储文件。当我尝试更改存储文件时,它会清除文件或不执行任何操作。这是我的代码..如何在更改数组中的变量后获取对象数组并更新对象数据文件?

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; 
} 

}在上底板各彼此接近的一个文件作为乐高TM

+2

欢迎来到Stack Overflow!我会想象这95%的代码与你的问题无关。请创建一个[**最小**,完整且可验证的示例](http://*.com/help/mcve),以说明您的问题。 –

成像字节。

如果你想在中间改变一些块,你必须在改变的位置之后移动所有的块,并将它们向后移动字节数,改变后的内容部分比旧的长。

对于硬盘上的字节几乎也是如此。

这意味着最简单的方法是首先覆盖整个文件。