objecten opslaan

  • Onderwerp starter Onderwerp starter Juzzz
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Juzzz

Gebruiker
Lid geworden
15 jan 2008
Berichten
281
ik wil data makkelijk kunnen opslaan en terug lezen.

wat ik heb:

Objects.java
Code:
import java.io.Serializable;

public class Objects implements Serializable{
    private String naam, woonplaats, postcode;
    private int huisNr, aantalBewoners;

    public Objects(){
	naam="unknown";
	woonplaats="unknown";
	postcode="unknown";
	huisNr=-1;
	aantalBewoners=-1;
    }

    public void setNaam(String s){
	naam = s;
    }
    
    public String getNaam(){
	return naam;
    }

     public void setWoonplaats(String s){
	woonplaats = s;
    }
    
    public String getWoonplaats(){
	return woonplaats;
    }

    public void setPostcode(String s){
	postcode = s;
    }
    
    public String getPostcode(){
	return postcode;
    }

    public void setHuisNr(int i){
	huisNr = i;
    }
    
    public int setHuisNr(){
	return huisNr;
    }

    public void setAantalBewoners(int i){
	aantalBewoners = i;
    }
    
    public int setAantalBewoners(){
	return aantalBewoners;
    }

    public String toString(){
	return new String("Naam:\t\t" + naam + "\n" +
			  "Woonplaats:\t" + woonplaats + "\n" +
			  "Postcode:\t" + postcode + "\n" +
			  "Huis nummer:\t" + huisNr + "\n" +
			  "Aantal bew:\t" + aantalBewoners + "\n"
			  );
    }
    
}

saveObjects.java
Code:
import java.io.*;
import java.util.*;

public class saveObjects{
    public static void main(String[] args){
	String naam="", woonplaats, postcode, today="";
	int huisNr, aantalBewoners, i=0;
	Date date = new Date();
	
	Objects obj = new Objects();

	obj.setNaam("piet");
	obj.setWoonplaats("rotterddam");
	obj.setPostcode("1337 ME");
	obj.setHuisNr(13);
	obj.setAantalBewoners(4);

	System.out.println(obj);

	//save
	try{
	    FileOutputStream fos = new FileOutputStream("test.dat");
	    ObjectOutputStream oos = new ObjectOutputStream(fos);
	    
	    oos.writeInt(12345);
	    oos.writeObject("Today is Monday");
	    oos.writeObject(new Date());
	    oos.writeObject(obj.getNaam());
	    
	    oos.close();
	}catch(IOException e) {e.printStackTrace();}

   	//load
	try{
	    FileInputStream fis = new FileInputStream("test.dat");
	    ObjectInputStream ois = new ObjectInputStream(fis);
	    
	    i = ois.readInt();
	    today = (String) ois.readObject();
	    date = (Date) ois.readObject();
	    naam = (String) ois.readObject();
	    
	    ois.close();
	}
	catch(IOException e) {e.printStackTrace();}
	catch(java.lang.ClassNotFoundException e){
	    System.err.print("ClassNotFoundException: ");
	    System.err.println(e.getMessage());
	}

	System.out.println("int i:\t" + i);
	System.out.println("today:\t" + today);
	System.out.println("Date:\t" + date);
	System.out.println("Naam:\t" + naam);
    }
}

nu moet ik het uitlezen in de zelfde volgorde als hoe ik het er in heb gezet.
dus als ik bijvoorbeeld 2 variabelen namen verander zoals:

Code:
i = ois.readInt();
naam = (String) ois.readObject();
date = (Date) ois.readObject();
today = (String) ois.readObject();

dan is naam=today is monday, en today=piet

wat ik wil:

ik wil dat ik het als een soort variabelen kan opslaan.

zoals bv in een .ini

Code:
[persoon]
naam=piet
leeftijd=21

dat ik gewoon kan zeggen in dit bestand zoek ik de naam.

ik hoop dat ik het zo goed uitgelegd hebt.

alvast bedankt
 
Laatst bewerkt:
Als je serializable gebruikt, kan jet het beste altijd gewoon het object wegschrijven..in jouw voorbeeld dat writeObject(obj). Als je niet wil dat alle variable worden weggeschreven kan je dit doen door ze "transient" te maken..

Met readObejct() kan je het gehele object in een keer weer inlezen. readObject geeft wel altijd een Object terug dus zal je deze moeten casten naar je eigen object.

Als je eenvoudige ini file wil hebben kan je gebruik maken van de Properties klasse,

de code ziet er dan ongeveer zo uit..

Code:
/*
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class Main {

    public static void main(String[] args) {
        TopScore score = new TopScore();
        score.setTopScore(100);
        score.setNaam("Piet");
        
        try {
            System.out.println(score.toString());

            System.out.println("Top score wegschrijven...");
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\topscore.ini"));
            score.createProperties().store(out, "Dit is de topscore data");

            score.setTopScore(0);
            score.setNaam("");
            System.out.println("Score is gereset.. ");
            System.out.println(score.toString());

            System.out.println("Top score inlezen...");

            BufferedInputStream in = new BufferedInputStream(new FileInputStream("C:\\topscore.ini"));
            Properties prop = new Properties();
            prop.load(in);
            score = new TopScore(prop);
            in.close();
            
            System.out.println(score.toString());

        } catch (IOException ie) {
            System.out.println("Er is iets fout gegaan met schrijven/lezen van topscore.");
        }
    }

    public static class TopScore  {

        private int topScore;
        private String naam;

        private static final String KEY_NAAM = "Naam";
        private static final String KEY_SCORE = "Score";

        private TopScore() {
           topScore = 0;
           naam = "Onbekend";
        }

        public void setTopScore(int score) {
            topScore = score;
        }

        public int getTopScore() {
            return topScore;
        }

        public void setNaam(String naam) {
            this.naam = naam;
        }

        public String getNaam() {
            return naam;
        }

        @Override
        public String toString() {
            return "TopScore [naam = " + naam + ", topscore = " + topScore + "]";
        }
        
        public Properties createProperties() {
            Properties prop = new Properties();
            prop.setProperty(KEY_NAAM, naam);
            prop.setProperty(KEY_SCORE, Integer.toString(topScore));
            return prop;
        }

        public TopScore(Properties prop) {
            naam = prop.getProperty(KEY_NAAM);
            topScore = Integer.parseInt(prop.getProperty(KEY_SCORE));
        }
    }
}
 
Als je serializable gebruikt, kan jet het beste altijd gewoon het object wegschrijven..in jouw voorbeeld dat writeObject(obj). Als je niet wil dat alle variable worden weggeschreven kan je dit doen door ze "transient" te maken..

Met readObejct() kan je het gehele object in een keer weer inlezen. readObject geeft wel altijd een Object terug dus zal je deze moeten casten naar je eigen object.

dus dan doe ik:

Code:
oos.writeObject(obj);

en hoe lees ik het dan weer terug?

Code:
objects obj2 = ois.readObject();

//en dan gewoon:

String naam = obj2.getNaam();
??????
 
Dit zou in principe moeten werken, bedenk wel dat je nu maar 1 object kunt opslaan. Als je meerdere objecten tegelijk wilt opslaan, zou je alles in een java.util.ArrayList moeten stoppen en dan de ArrayList wegschrijven met writeObject ( );.
 
Je moet nog even een cast doen..

dus Objects obj2 = (Objects) ois.readObject();

Java kan van te voren niet weten wat voor klasse wordt ingelezen. Dus moet je dat zelf aangeven wat voor klasse je verwacht.

(doordat je klasse Objects heeft wordt in de voorbeeld er even niet duidelijker op ;) )
 
Je moet nog even een cast doen..

dus Objects obj2 = (Objects) ois.readObject();

Java kan van te voren niet weten wat voor klasse wordt ingelezen. Dus moet je dat zelf aangeven wat voor klasse je verwacht.

(doordat je klasse Objects heeft wordt in de voorbeeld er even niet duidelijker op ;) )

EDIT:

THANKS

wat ik nu heb werkt:

bewoner.java
Code:
import java.io.Serializable;

public class bewoner implements Serializable{
    private String naam, woonplaats, postcode;
    private int huisNr, aantalBewoners;

    public bewoner(){
	naam="unknown";
	woonplaats="unknown";
	postcode="unknown";
	huisNr=-1;
	aantalBewoners=-1;
    }

    public void setNaam(String s){
	naam = s;
    }
    
    public String getNaam(){
	return naam;
    }

     public void setWoonplaats(String s){
	woonplaats = s;
    }
    
    public String getWoonplaats(){
	return woonplaats;
    }

    public void setPostcode(String s){
	postcode = s;
    }
    
    public String getPostcode(){
	return postcode;
    }

    public void setHuisNr(int i){
	huisNr = i;
    }
    
    public int setHuisNr(){
	return huisNr;
    }

    public void setAantalBewoners(int i){
	aantalBewoners = i;
    }
    
    public int setAantalBewoners(){
	return aantalBewoners;
    }

    public String toString(){
	return new String("Naam:\t\t" + naam + "\n" +
			  "Woonplaats:\t" + woonplaats + "\n" +
			  "Postcode:\t" + postcode + "\n" +
			  "Huis nummer:\t" + huisNr + "\n" +
			  "Aantal bew:\t" + aantalBewoners + "\n"
			  );
    }
    
}

saveObject.java
Code:
import java.io.*;
import java.util.*;

public class saveObjects{
    public static void main(String[] args){
	String naam="", woonplaats, postcode, varIn;
	int huisNr, aantalBewoners, varInI;
	Date date = new Date();
	bewoner obj = new bewoner();

	

	System.out.println(obj);
	try{
	    BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
	    System.out.print("enter write or read:\t");
	    varIn = bin.readLine();
	    if (varIn.equals("write")){
		System.out.println("write");

		FileOutputStream fos = new FileOutputStream("test.dat");
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		
		System.out.print("\tenter Naam:");
		varIn = bin.readLine();
		obj.setNaam(varIn);
		
		System.out.print("\tenter Plaats:");
		varIn = bin.readLine();
		obj.setWoonplaats(varIn);
		
		System.out.print("\tenter Postcode:");
		varIn = bin.readLine();
		obj.setPostcode(varIn);
		
		System.out.print("\tenter Huis nummer:");
		varInI = Integer.parseInt(bin.readLine());
		obj.setHuisNr(varInI);

		System.out.print("\tenter Aantal bewoners:");
		varInI = Integer.parseInt(bin.readLine());
		obj.setAantalBewoners(varInI);
		
		oos.writeObject(obj);
		
		oos.close();
	    }else if (varIn.equals("read")){
		System.out.println("read");
		
		FileInputStream fis = new FileInputStream("test.dat");
		ObjectInputStream ois = new ObjectInputStream(fis);
	
		obj = (bewoner) ois.readObject();
		
		ois.close();
	    }else{
		System.out.println("wrong input type write or read");
	    }
	}
	catch(IOException e) {e.printStackTrace();}
	catch(java.lang.ClassNotFoundException e){
	    System.err.print("ClassNotFoundException: ");
	    System.err.println(e.getMessage());
	}
	
      	System.out.println(obj);
	System.out.println("obj.getNaam():\t" + obj.getNaam());
    }
}


volgsmij goed?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan