2017-04-22 20 views
-1

オブジェクトの配列があり、オブジェクトの値を変更して、オブジェクトインファイルが格納されている記憶域ファイルを再更新しようとしています。ストレージファイルを変更しようとすると、ファイルを消去するか、何もしません。ここに私のコードは、レゴTM基板上ブロック互いに近接各としてファイルに..配列内の変数を変更した後、オブジェクトの配列を取得してオブジェクトデータファイルを更新するにはどうすればよいですか?

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

}

+2

ようこそスタックオーバーフロー!私は、このコードの95%があなたの質問に関連していないと思います。あなたの問題を示す[**最小**、完全で実証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

答えて

0

撮像バイトです。

途中の一部のブロックを変更する場合は、変更された位置の後にすべてのブロックを移動し、バイト数分後に移動する必要があります。変更された内容の部分は古いものよりも長くなります。

ハードディスクのバイトとほぼ同じです。

これは、最初の場所でファイル全体を上書きするのが最も簡単な方法であることを意味します。

関連する問題