Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Salvataggio Oggetto tramite Stream

    Ciao a tutti

    Sto lavorando su un programma che , tra le altre cose , deve memorizzare in una collezione degli oggetti (in questo caso oggetti di tipo "Articolo").

    Ho scritto una classe Manager con un metodo "Salva" (Alla fine del codice) :

    codice:
    package PacchettoA;
    
    import java.io.*;
    import java.util.*;
    
    public class Manager implements ManagerContenitore{
    	
    	private Set<Articolo> Contenitore;
    	
    	public Manager(){
    		Contenitore = new HashSet<Articolo>();
    	}
    	
    	@Override
    	public boolean AggiungiArticolo(Articolo A){
    		Contenitore.add(A);
    		return true;
    	}
    	
    	@Override
    	public boolean RimuoviArticolo(Articolo A){
    		if(!(Contenitore.contains(A))) return false;
    		Contenitore.remove(A);
    		return true;
    	}
    	
    	@Override
    	public void ModificaArticolo(Articolo A){
    		
    		//A.setMarca(....);
    		//A.setModello(....);
    		//.....				
    	}
    	
    	@Override
    	public boolean Salva(Articolo A){
    		
    		try{
    			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Contenitore"));
    			out.writeObject(A);
    			out.close();
    			return true;
    		}
    		catch(Exception e){
    			return false;
    			
    		
    		}
    	}
    	
    	
    	
    	public Iterator<Articolo> iterator(){
    		return Contenitore.iterator();
    	}
    	
    }//MANAGER
    uno dei miei dubbi è cosa scrivere sul FileOutputStream.
    Se scrivo :

    codice:
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Contenitore"));
    Mi salva gli oggetti nella collezione?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Salvataggio Oggetto tramite Stream

    Originariamente inviato da Markus85
    codice:
    	public boolean Salva(Articolo A){
    		
    		try{
    			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Contenitore"));
    			out.writeObject(A);
    			out.close();
    			return true;
    		}
    Ma vuoi serializzare 1 Articolo (quel A) .... oppure la collezione (quel Contenitore) ? Qui sopra hai il primo scenario .... se vuoi il secondo, devi cambiare.

    In ogni caso Articolo deve essere Serializable, altrimenti non funzionerebbe in nessuno dei due casi (le collezioni sono serializzabili, a patto che anche il contenuto lo sia).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Si voglio salvare gli articoli che metto nella collezione.

    Articolo implementa Serializable.

    In pratica voglio salvare gli oggetti articolo nella collezione in modo che ad una successiva apertura del programma siano ancora salvati.
    (Il programma gestisce un magazzino di articoli.....)

    Non capisco se devo creare un file oppure la collezione viene salvata automaticamente in qualche area di memoria del computer.

    Mi aiuti?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    Non capisco se devo creare un file oppure la collezione viene salvata automaticamente in qualche area di memoria del computer.
    Scusa ma non capisco il tuo dubbio. Hai il metodo Salva (nota: il parametro Articolo non so a che ti serve, se vuoi salvare la collezione) che è in Manager. La collezione (quel Set) è pure in Manager. In Salva crea il ObjectOutputStream (è quello che hai già fatto), scrivi la collezione e chiudi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Articolo è l'oggetto che rappresenta la merce

    codice:
    package PacchettoA;
    
    import java.util.*;
    import java.io.*;
    
    public class Articolo implements Serializable{
    	
    	private String tipo;
    	private String marca;
    	private String modello;
    	private String codice;
    	private String settore;
    	private int quantità;
    	private int quantitàD;
    	private int quantitàA;
    	private double prezzo;
    	private String caratteristiche;
    	
    	
    	public Articolo(String tipo, String marca, String modello, String codice, String settore, int quantità, double prezzo, String caratteristiche){
    		this.tipo = tipo;
    		this.marca = marca;
    		this.modello = modello;
    		this.codice = codice;
    		this.settore = settore;
    		this.quantità = quantità;
    		this.prezzo = prezzo;
    		this.caratteristiche = caratteristiche;
    		
    	}//COSTRUTTORE ARTICOLO
    
    ...
    .....
    .......
    Io devo salvare questi oggetti articolo in una collezione (nel mio caso un HashSet).

    Come devo serializzare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    Io devo salvare questi oggetti articolo in una collezione (nel mio caso un HashSet).

    Come devo serializzare?
    Quello che si vede dal codice è che Manager ha il metodo Salva e la collezione (quel Set<Articolo> Contenitore). Quindi in Salva: a) Crea il ObjectOutputStream (l'hai già fatto), b) scrivi con writeObject la collezione, c) chiudi lo stream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ok.

    Ma dove vengono salvati i dati? (Dove viene salvata la collezione?)

    devo crearmi un oggetto file e salvare la collezione li?

    Al riavvio del programma ci sono ancora i dati che ho salvato?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    Ma dove vengono salvati i dati? (Dove viene salvata la collezione?)

    devo crearmi un oggetto file e salvare la collezione li?
    Scusa eh, ma tu hai scritto:

    codice:
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Contenitore"));
    Secondo te su quale file vengono scritti gli oggetti? (scusa ma questa è come la classica domanda "di che colore è il cavallo bianco di Napoleone?" )

    Originariamente inviato da Markus85
    Al riavvio del programma ci sono ancora i dati che ho salvato?
    Sul file sì, se non l'hai toccato, cancellato tu, ecc...
    Se al riavvio del programma vuoi riavere i dati nella collezione Set, li devi caricare dal file. Esattamente con l'opposto: FileInputStream e ObjectInputStream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ah quindi contenitore rappresenta il nome del file.

    Mi ero confuso e credevo rappresentasse la collezione.

    Mi puoi dire in che percorso viene salvato questo file?


    quindi io aggiungo un oggetto Articolo nel mio HashSet con il metodo AggiungiArticolo e successivamente salvo la collezione contenente l'oggetto Articolo con il metodo Salva (Ti posto la parte di codice interessata) :

    codice:
    	public void actionPerformed(ActionEvent e){
    					
    					Articolo ArticoloAggiunto = new Articolo(infoTipo.getText(),infoMarca.getText(), infoModello.getText(), infoCodice.getText(), infoSettore.getText(), Integer.parseInt(infoQuantità.getText()), Double.parseDouble(infoPrezzo.getText()),infoCaratteristiche.getText());
    					String Aggiunta = ("Articolo Aggiunto in magazzino : " + " [ " +ArticoloAggiunto.toString() + " ]" +"\n");
    					EventiMagazzinoRiepilogo.append(Aggiunta);
    					contenitore.AggiungiArticolo(ArticoloAggiunto);
    					contenitore.Salva(ArticoloAggiunto);
    					Bsi.dispose();
    					
    				}

    Codice del metodo Salva:

    codice:
    	@Override
    	public boolean Salva(Articolo A){
    		
    		try{
    			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Contenitore"));
    			out.writeObject(contenitore); //contenitore cannot be resolved to a variable
    			out.close();
    			return true;
    		}
    		catch(Exception e){
    			return false;
    			
    		
    		}
    	}
    Però in writeObject non mi vede il contenitore.
    ho creato questo contenitore nell'interfaccia principale :

    codice:
    public class InterfacciaPrincipale extends JFrame {
    ... //Altri campi
    private ManagerContenitore contenitore = new Manager();
    Come mai?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Markus85
    Mi puoi dire in che percorso viene salvato questo file?
    Solo "Contenitore", senza path, è nella directory "corrente". Quale sia dipende da come è stata avviata la applicazione.

    Originariamente inviato da Markus85
    codice:
    	public boolean Salva(Articolo A){
    Ti serve il parametro? Direi di no.

    Originariamente inviato da Markus85
    codice:
    out.writeObject(contenitore); //contenitore cannot be resolved to a variable
    La variabile di istanza l'hai chiama Contenitore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.