/** * Dit programma toont hoe je gemakkelijk objecten naar file schrijft. * Je voegt 'implements Serializable' toe aan de klassedefinities van al je objecten. * Als je object naar andere objecten verwijst, worden die ook mee geschreven. * Je moet dus enkel het hoofdobject schrijven (waar de andere objecten aan vast hangen). * * Gebruik: * Object2File.writeObject2File(file, object); * object = Object2File.readObjectFromFile(file); * * Het onderstaand programma demonstreert het. */ import java.io.*; import javax.swing.JFileChooser; // implementeer Serializable interface: hiermee geef je toelating aan java om je object naar file te schrijven public class Object2File implements Serializable { // Optioneel: serialVersionUID // hiermee geef je aan dat dit de eerste versie van de klasse is // als je dit later ophoogt kunnen oude files niet meer upgeload worden (geven een versie-error) private static final long serialVersionUID = 1; /* demoprogramma */ public static void main(String[] args) { // 1. laat de gebruiker een file kiezen JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("Specifieer een file om het object naar toe te schrijven"); chooser.showDialog(null, "Schrijf object naar file"); File file = chooser.getSelectedFile(); if (file == null){ System.err.println("Je hebt geen of een verkeerde file geselecteerd."); return; // we stoppen het programma } // 2. we maken een object aan en saven het Object2File object = new Object2File("Jan Lemeire", 43, "jan.lemeire@vub.ac.be"); try{ Object2File.writeObject2File(file, object); } catch(Exception e){ System.err.println("Het saven van object <"+object+"> mislukte wegens fout: "+e); return; // we stoppen het programma } System.out.println("Het object <"+object+"> is weggeschreven naar file <"+file.getName()+">"); // 3. laat de gebruiker een file kiezen om het object weer te laden JFileChooser chooser2 = new JFileChooser(); chooser.setDialogTitle("Kies een file dat je wenst in te laden"); chooser2.showDialog(null, "Laad object"); File file2 = chooser2.getSelectedFile(); if (file2 == null){ System.err.println("Je hebt geen of een verkeerde file geselecteerd."); return; // we stoppen het programma } Object o ; try{ o = Object2File.readObjectFromFile(file2); } catch(Exception e){ System.err.println("Het loaden van een object uit file <"+file2.getName()+"> lukte niet wegens fout: "+e); return; // we stoppen het programma } // 4. we zetten het object om naar de juiste klasse Object2File object2 = (Object2File) o; System.out.println("Het object van file <"+file2.getName()+"> is: <"+object2+">"); } // Dit zijn de twee functies die je nodig hebt public static void writeObject2File(File file, Serializable o) throws FileNotFoundException, IOException { FileOutputStream out = new FileOutputStream(file); ObjectOutputStream s = new ObjectOutputStream(out); s.writeObject(o); s.close(); } public static Object readObjectFromFile(File file) throws FileNotFoundException, IOException, ClassNotFoundException{ FileInputStream out = new FileInputStream(file); ObjectInputStream s = new ObjectInputStream(out); Object o = s.readObject(); s.close(); return o; } // voor de demo gaan we een object maken van deze klasse String naam; int leeftijd; transient String emailadres; // met transient duiden we aan dat we dit attribuut niet willen opslaan Object2File(String naam, int leeftijd, String emailadres){ this.naam = naam; this.leeftijd = leeftijd; this.emailadres = emailadres; } public String toString(){ return naam + " "+leeftijd+" jaar met emailadres = "+emailadres; } }