# Werte bei Programmneustart behalten



## felix.schnee (19. Jan 2013)

hallo zusammen,
ich bin neu hier und wollte gleich mal eure fachkundige hilfe in Anspruch nehmen. ich bin grad dabei mir java beizubringen und will im Zuge dessen eine Fifa Tabelle programmieren. Ich brauche dafür nun eine Möglichkeit Werte die ich vormals eingegeben habe bei einem Neustart zu speichern.

bisher habe ich es geschafft eine Klasse Player zu erstellen. mit einem array eine Liste von 5 Spielern zu erstellen. in dieses Array einen Spieler hinzuzufügen.

was ich will:
ich möchte das ganze jetzt so haben das ich mit der case anweisung die Spieler hinzufügen kann und dann diese bei einem Programm Neustadt gemerkt wurden. d.h ich will später das programm ja nur aufrufen und einige werte schon vorgespeichert haben.

ich hoffe ich konnte mein Anliegen deutlich machen


```
public class Hauptmenü {

	public static void main(String[] args) {
		
		String n = javax.swing.JOptionPane.showInputDialog( "Welche Funktion soll ausgeführt werdern." );
	    int e= Integer.parseInt( n );
		
		
	int anzahl = 0 ;
	
	Player[] foo = new Player[5]; //platz für 5 objekte
    for(int i = 0; i < 5; i++){
       foo[i]  = new Player(); //objecte erzeugen
       foo[i].schreibstat();
    }
    
    
	
		switch (e){
	case 1:
		// noch leerer Platz
		
		break;
	case 2:	
		System.out.print("Spieler hinzufügen");
		anzahl++;
		String nn = javax.swing.JOptionPane.showInputDialog( "Spieler hinzufügen: \n Bitte Name eingeben." );
	    foo[anzahl].name=nn;
	    foo[anzahl].schreibstat();
		
		break;
	default:}
		
	
		
		
		
	}}
```


----------



## Camino (19. Jan 2013)

Du musst deine Daten irgendwie abspeichern, da gibt es mehrere Möglichkeiten. In eine XML-Datei wäre evtl. sinnvoll. Musst du halt nur noch eine Klasse anlegen, welche das Auslesen und Speichern erledigt.


----------



## felix.schnee (19. Jan 2013)

erstmal danke für die schnelle Antwort.

Also geht das nicht das ich in dem Programm Werte ablege und die wieder aufrufe, sondern ich muss die in ner Datei ablegen und bei Programmaufruf wieder laden?


----------



## felix.schnee (19. Jan 2013)

ist das nicht möglich einen wert durch eingabe in das Programm einzulesen diesen einer variable zu übergeben und die dann beim Neustart des Programms wieder aufrufen zu können?


----------



## Camino (19. Jan 2013)

felix.schnee hat gesagt.:


> erstmal danke für die schnelle Antwort.
> 
> Also geht das nicht das ich in dem Programm Werte ablege und die wieder aufrufe, sondern ich muss die in ner Datei ablegen und bei Programmaufruf wieder laden?



Nee, nach Beenden deines Programmes sind die Werte weg, wenn du sie nicht irgendwo gespeichert hast. Wie gesagt, es gibt da mehrere Möglichkeiten: Textdatei, XML, Datenbank... Von da kannst du die Werte dann beim Programmstart wieder laden.


----------



## Templarthelast (19. Jan 2013)

felix.schnee hat gesagt.:


> ist das nicht möglich einen wert durch eingabe in das Programm einzulesen diesen einer variable zu übergeben und die dann beim Neustart des Programms wieder aufrufen zu können?



Das würde schon funktionieren, allerdings bräuchtest du ein weiteres Programm in welchem die Variable gespeichert werden würde. Ich würde in deinem Falle einfach den Weg über eine xml/cvs Datei, was wesentlich einfacher wäre.


----------



## Camino (19. Jan 2013)

XML wäre halt praktisch, weil man da auch die Datenstruktur der Klasse Player übernehmen und speichern könnte.


----------



## felix.schnee (19. Jan 2013)

so hab jetzt ne  lösung gefunden. ist nich ganz so wie oben aber es bringt mich ein zwei schritte weiter vll schaffe ich die Tabelle doch noch irgendwie ;-)



```
try{	 
	    	  FileOutputStream fileStream = new FileOutputStream("Spieler.ser");
	    	  ObjectOutputStream os = new ObjectOutputStream(fileStream);
	    	  os.writeObject(adde);
	    	  os.close();}
	          catch (IOException ex){
	        	  ex.printStackTrace();
	          } adde = null;
	          
	    	  break;
	      case 3:
	    	  try{
	    	  FileInputStream fileStreamback = new FileInputStream("Spieler.ser");
	    	  ObjectInputStream ds = new ObjectInputStream(fileStreamback);
	 	      Player einsw =(Player) ds.readObject();
	    	  ds.close();
	    	  adde=einsw;
	    	  adde.schreibstat();}
	    	  catch (IOException ex){
	        	  ex.printStackTrace();}
	    	  
	      default:}
```

kann -close-


----------



## Camino (19. Jan 2013)

Ja, serialisieren wäre noch eine weitere Möglichkeit. Wobei ich XML bevorzugen würde. Da kannst du die XML-Datei auch ohne deine Anwendung bearbeiten oder anschauen.

Für die Sammlung der Player würde ich keinen festen Array, sondern eine ArrayList<Player> nehmen. Die ArrayList ist dynamisch erweiterbar und nicht von der Grösse vorher festgelegt.



> kann -close-



Deinen Thread kannst du auch selbst schliessen bzw. auf "erledigt" setzen.


----------



## Q-bert (25. Jun 2017)

Hallo. Könnte dann einer wenigstens erklären wie das gehen soll ? Wie soll man die Werte in XML Dokument speichern ?


----------



## Robat (25. Jun 2017)

Der Thread ist 4 Jahre alt 
Mach am besten deinen eigenen auf mit einer speziellen Frage.


----------

