# Daten in ArrayList speichern



## Guest (8. Apr 2008)

Ist es möglich durch Tastatureingabe ( InputStreamReader) Daten in einer ArrayList zu speichern?
Wenn ja wie kann man das machen.Thx.


----------



## anfänger15 (8. Apr 2008)

ja du kannst die daten die du einliest(von tastatur) in der arrayliste speichern. Einfach neu datensätze hinzufügen ging glaub mit add.


----------



## SlaterB (8. Apr 2008)

der schwierigere Teil scheint mir, die Daten einzulesen,
hast du da schon irgendwas,
etwa 
String daten = reader.readIrgendwas();

danach
liste.add(daten);
aufzurufen, scheint ja nicht so schwer


----------



## Guest (8. Apr 2008)

Ich habe bis jetzt gemacht das ich Daten einlesen kann und diese Daten werden in einer textdatei auf der Festplatte gespeichert und auslesen funktioniert auch. Allerdings möchte ich gerne das die eingelesenen Daten nicht in einer Textdatei gespeichert werden sollen, sondern die Daten in einer ArrayList abgelegt werden. Ist dies Generell möglich oder geht das nicht ??


----------



## SlaterB (8. Apr 2008)

ist möglich

liste.add(daten);


----------



## anfänger15 (8. Apr 2008)

ja das geht du musst einfach anstatt das was du einliest in eine textdatei mit add in ein arralist speichern


----------



## Guest (8. Apr 2008)

```
// Fall 1 Liest die Objekte ein aus Textdatei
			case 1: 
			        String lesen;
			        try{
			        	FileReader datei=new FileReader("objekte.txt");
			        	BufferedReader read=new BufferedReader(datei);
			        	lesen=read.readLine();
			        	while(lesen!=null){			        		
			        		System.out.println("In der Datei sind enthalten: "+lesen);
			        		lesen=read.readLine();
			        		System.out.println("\n"+c);
			        	}
			        	read.close();
			        }
			        catch(FileNotFoundException e){
			        	System.out.println("Datei nicht gefunden");
			        }
			        
			        
			break;
			// Fall 2 Schreibt Objekte in die Textdatei
			case 2: System.out.println("\nNeues Objekt anlegen");
			        String b;
			        try{
			        	
			        	FileWriter speichern=new FileWriter("objekte.txt");
					    BufferedWriter speichern1=new BufferedWriter(speichern);     
				        InputStreamReader in=new InputStreamReader(System.in);
				        BufferedReader puffer=new BufferedReader(in);
				        b=puffer.readLine();
				        while(b.compareTo("Exit")!=0){
				        speichern1.write(b);
				        
				        b=puffer.readLine();
				        c.add(speichern);
				        }
			            speichern1.close();
[/quote]
```


----------



## Guest (8. Apr 2008)

wenn ich das dort mit c.add(speichern) mache passiert aber nichts


----------



## SlaterB (8. Apr 2008)

es passiert nur das, was das Kommando sagt: ein Objekt wird in die Liste eingefügt,
nirgendo gehen bunte Lampen an oder ähnliches,

du kannst danach ja die Liste prüfen:
System.out.println("liste enthält "+c.size()+" Elemente");

oder wenn du schon irgendwo eine Ausgabe hast, 
dann erkläre doch bitte den genauen Programmablauf mit allen Ausgaben usw, vor allem den zugehörigen Code

--------

du fügst in die Liste den FileWriter ein, ist das gewollt? merhfach in der Schleife immer dasselber Objekt,
unter 'Daten' verstehen man allgemein etwas anderes, z.B. den String b


----------



## Guest (8. Apr 2008)

```
public static void main(String[] args) {
        // Objects construction
		Point point=new Point("Punkt",10,20,30,40);
		Linie linie=new Linie("Linie",20,5,10);
		Sphere sphere=new Sphere("Kugel",30,3,1,"gelb");
		Triangle triangle=new Triangle("Dreieck",40,50,-25,-40,"pink");
//		 Consctrucion of an ArrayList
		Collection c=new ArrayList(100);
		c.add(point);
		c.add(linie);
		c.add(sphere);
		c.add(triangle);
		
		
		
				
		
	boolean ende=false;
	    // Ausgabe der Objektverwaltung mit Switch Konstrukt
		System.out.println("Die Objekteverwaltung von Grafiken");
		System.out.println("=================================="+
				           "==================================");
		System.out.println("\nHauptmenue");
		System.out.println("\n(1) Objekte Anzeigen");
		System.out.println("(2) Neues Objekt hinzufuegen");
		System.out.println("(3) Objekte suchen");
		System.out.println("(4) Objekt loeschen");
		System.out.println("\n(0) Programm beenden");
		try{
			System.out.println("\nAuswahl: ");
			Scanner eingabe=new Scanner(System.in);
			int auswahl=eingabe.nextInt();
			switch(auswahl){
			// Fall 1 Liest die Objekte ein aus Textdatei
			case 1: 
			        String lesen;
			        try{
			        	FileReader datei=new FileReader("objekte.txt");
			        	BufferedReader read=new BufferedReader(datei);
			        	lesen=read.readLine();
			        	while(lesen!=null){			        		
			        		System.out.println("In der Datei sind enthalten: "+lesen);
			        		lesen=read.readLine();
			        		System.out.println("\n"+c);
			        	}
			        	read.close();
			        }
			        catch(FileNotFoundException e){
			        	System.out.println("Datei nicht gefunden");
			        }
			        
			        
			break;
			// Fall 2 Schreibt Objekte in die Textdatei
			case 2: System.out.println("\nNeues Objekt anlegen");
			        String b;
			        try{
			        	
			        	FileWriter speichern=new FileWriter("objekte.txt");
					    BufferedWriter speichern1=new BufferedWriter(speichern);     
				        InputStreamReader in=new InputStreamReader(System.in);
				        BufferedReader puffer=new BufferedReader(in);
				        b=puffer.readLine();
				        while(b.compareTo("Exit")!=0){
				        speichern1.write(b);
				        c.add(speichern);
				        b=puffer.readLine();
				        
				        }
			            speichern1.close();
			        }
			catch(IOException e){
				e.printStackTrace();
			}
					System.out.println("Neues Objekt angelegt");
			break;
			case 3: System.out.println("\nObjekte suchen");
			break;
			case 4: System.out.println("\nObjekt loeschen");
			break;
			// Fall 0 Exit Program
			case 0: System.out.println("\nProgramm wurde beendet");
			ende=true;
			break;
			default: System.out.println("\nEingabe existiert nicht");
		
			
			}}
		catch(Exception e){
			System.out.println("Error");
		}
```


----------



## Guest (8. Apr 2008)

Habe mal den Code geschickt um zu zeigen was ich vorhabe : Es ist ein Auswahlfeld gegeben und auf Feld 1 sollen die Daten ausgelesen werden und auf Feld 2 sollen die Daten eingegeben werden. Nun wollte ich die Daten per Tastatur eingeben und diese Daten sollen dann in der ArrayList gespeichert werden.


----------



## SlaterB (8. Apr 2008)

hast du auch den Rest von meinem Posting gelesen,
was ich zum add gesagt habe, wie es mit dem Test auf Erfolg aussieht usw?

wenn du nur den Code postest und nicht selber mitmachst dann machts ja keinen Spass


----------



## Guest (8. Apr 2008)

Wenn ich den Test mit Size() mache bekomme ich als Antowrt 4 Elemente. Und das sind die Elemente die ich sowieso in die ArrayList eingegeben habe. Es sollten aber mit der tastatureingabe 5 sein.


----------



## SlaterB (8. Apr 2008)

wo machst du diese Ausgabe? 
irgendwo am Ende? vielleicht wird ja der entsprechende Code gar nicht ausgeführt,
schreibe

System.out.println("gleich gehts los, liste enthält vorher "+c.size()+" Elemente"); 
c.add(speichern); 
System.out.println("liste enthält "+c.size()+" Elemente"); 

wie sieht die Ausgabe nun aus?


----------



## Guest (8. Apr 2008)

ach so könnte viielleicht daran liegen das ich es falsch plaziere also ich habe die Ausgabe im Fall 1 angegeben weil dort ja die Ausgabe erscheienn soll moment ich markiere es im Code !!


----------



## Guest (8. Apr 2008)

```
// Fall 1 Liest die Objekte ein aus Textdatei
			case 1: 
			        String lesen;
			        try{
			        	FileReader datei=new FileReader("objekte.txt");
			        	BufferedReader read=new BufferedReader(datei);
			        	lesen=read.readLine();
			        	while(lesen!=null){			        		
			        		System.out.println("In der Datei sind enthalten: "+lesen);
			        		lesen=read.readLine();
			        		System.out.println("\n"+c);
                                                System.out.println("gleich gehts los, liste enthält vorher "+c.size()+" Elemente");
                                                c.add(speichern);
                                                System.out.println("liste enthält "+c.size()+" Elemente");

			        	}
			        	read.close();
			        }
			        catch(FileNotFoundException e){
			        	System.out.println("Datei nicht gefunden");
			        }
```


----------



## SlaterB (8. Apr 2008)

dagegen spricht ja an sich nix, später ist das die richtige Stelle,
aber im Moment wollen wir doch klären, warum in die Liste nix eingefügt wird,
da müssen drastische Schritte herhalten, da muss das Programm näher untersucht werden, 
was genau in Fall 2 passiert,
daher nun erstmal testweise dort die Ausgaben

ein Debugger tuts natürlich auch, falls du dich damit auskennst


----------



## Guest (8. Apr 2008)

ach so das Problem liegt daran wesehlb es noch nicht funktioniert hat beim c.add(speichern) er kennt speichern nicht


----------



## SlaterB (8. Apr 2008)

in Fall 1, denn dort ist der Befehl ja auch vöölig deplaziert,
speichern gibts nur unter Fall 2

(siehe auch mein Posting vor 2 Min.)


----------



## Guest (8. Apr 2008)

Ja da hast du recht gespeichert wird nur in Fall 2


----------



## Guest (8. Apr 2008)

So habe es jetzt eingesetzt in Fall 2 was du mir geraten hast und er gibt mir aus :


Ich gebe ein element ein z.B: Otto

danach erscheint die Ausgabe : gleich gehts los Liste erhält 4 element

danach erscheint liste enthält 5 elemente


----------



## SlaterB (8. Apr 2008)

siehste, also ist was in die Liste reingekommen, ein Element mehr als vorher,
dass du nicht den String Otto sondern das FileReader-Objekt in die Liste schreibst,
habe ich ja schon erwähnt


----------



## Guest (8. Apr 2008)

ja das wollt ich dich fragen, das hab ich schon gesehn wieso schreibt der den filereader darin ich will ja das wort otto darin haben


----------



## Guest (8. Apr 2008)

ich habs yeahhhhhhhhhhhhhhhhhh super danke für deine Hilfe hast mir sehr geholfen daumenhoch !!! hast mir den Tag gerettet hehe


----------



## Guest (8. Apr 2008)

Ein Probem gibts nur leider wenn ich den Wert mit Fall 1 auslesen will zeigt der mir nicht den neuen Wert in der Liste an was kann ich da machen?


----------



## SlaterB (8. Apr 2008)

was kommt denn da für eine Ausgabe? wieviel Elemente sind drin?

und du startest auch nicht das Programm zwischendurch neu oder ähnliches?
die Liste wird nicht auf der Festplatte gespeichert


wenn die Liste in einem Programmablauf mal 5 Elemente enthält und später nur noch 4 dann prüfe genau nach,
wann sie sich verändert, 
gib die Liste z.B. nach dem case aus, am Ende und am Anfang der Schleife usw.
wo ist der Bruch?


----------



## Guest (8. Apr 2008)

doch um die Elemente wieder abzufragen muss ich das Programm neu Starten dann sind wieder nur 4 drin


----------



## SlaterB (8. Apr 2008)

tja, und Listen werden nicht per Zauberhand irgendwo gespeichert,
dafür gibts die guten alten Dateien

natürlich könntest du am Anfang oder unter Fall 1 die Datei einlesen und deren Elemente in die Liste schreiben


----------



## Guest (8. Apr 2008)

was rätst du mir was ich nun tun soll die Daten sollten schon immer in der ArrayList bestehen bleiben


----------



## SlaterB (8. Apr 2008)

das ist absolut unmöglich, 
wenn du einen Computer einschaltest, dann ist ja auch nicht der Web-Browser mit den alten Seiten noch geöffnet
(gut, bei manchen Betriebssystemen mag das so sein, aber auch da wird dann diese Information in eine Datei gespeichert)

also: Listen-Inhalt in eine Datei schreiben und beim nächsten Start wieder lesen


----------



## Guest (8. Apr 2008)

Wenn du mir jetzt noch verrätst womit ich die ArrayListe in eine Datei schreibe bin ich zufrieden


----------



## SlaterB (8. Apr 2008)

du hast doch schon einen FileWriter in welchem du mit einer while-Schleife irgendwas reinschreibst,

auf gleiche Weise in diese oder eine andere Datei musst du nun die Listen-Elemente reinschreiben,
zum Durchlaufen einer Liste bietet sich eine for-i-Schleife an


----------



## Guest (8. Apr 2008)

Oki ich werds dann mal mit dem PrintWriter versuchen thx.


----------



## Guest (8. Apr 2008)

wie durchlaufen ich nochmal eine ArrayList ?


----------



## SlaterB (8. Apr 2008)

http://www.galileocomputing.de/open...12_003.htm#mj6937070cdee281590b69b83c3dce149d
12.3 Listen 


Listing 12.8 com/tutego/insel/util/list/IndexOfSubList.java, main()


----------



## Guest (9. Apr 2008)

So habe es geschafft die Eingabedaten inclusive der vorhandenenen ArrayList Elemente in einer Datei zu speichern mit Serialisierung. Allerdings hab ich ein Probelem bei der deserialisierung. Kann mir jm sagen was ich da falsch hab.


```
//	Fall 1 Legt neues Objekt an 
			
			case 1: System.out.println("\nNeues Objekt anlegen");
                    String b;
			        try{
			        	FileOutputStream fos = new FileOutputStream("C:\\test.txt");
						ObjectOutputStream oos = new ObjectOutputStream(fos);
						
						InputStreamReader in=new InputStreamReader(System.in);
					    BufferedReader puffer=new BufferedReader(in);
					    
					    b=puffer.readLine();
					    oos.writeObject(b);
				        
				        
				        System.out.println("Liste enthält vorher "+c.size()+" Elemente");
		        		c.add(b);
		        		System.out.println("Neues Element angelegt jetzt "+c.size()+" Elemente");
			            System.out.println(c);
						
			            oos.writeObject((ArrayList) c);
						oos.flush();
						
					    System.out.println("ArrayList wurde in Datei gespeichert");
```


```
//	 Fall 2 Liest aus ArrayList
			case 2: System.out.println("\nObjekte anzeigen");
			       	        	        
	        
	        	 try{
	        		 FileInputStream in=new FileInputStream("C:\\test.txt");
	        		 ObjectInputStream in1=new ObjectInputStream(in);
	        		 c=(ArrayList)in1.readObject();
	        		 c.toString();
	        	 }
	        catch(FileNotFoundException e){
	        	System.out.println("Datei nicht gefunden");
	        }
	        break;
```


----------



## SlaterB (9. Apr 2008)

in der Datei stehen doch anfangs die Strings b
(oos.writeObject(b); )

also sind die ersten Objekte, die du wieder herauslesen musst,
auch String und keine ArrayList


die ArrayList komplett zu speichern ist aber recht schlau,
das hatte ich ganz vergessen,
in Fall 1 also nur die ArrayList speichern, dann kannst du sie später auch wieder lesen,

bei Problemen Compiler-Fehler/ Exceptions zur Laufzeit/ sonstiges Fehlverhalten genau beschreiben


----------



## Guest (9. Apr 2008)

Ich möchte aber in Fall 1 beides speichern ArrayList und Tastatureingaben.
Gibt es eine Möglichkeit in Fall 2 trotzdem beides getrennt auszulesen


----------



## SlaterB (9. Apr 2008)

entweder schreibst du in unterschiedliche Dateien
oder liest erstmal alle Strings aus (und vergisst sie gleich wieder) bis du auf eine ArrayList in der Datei stößt

mit instanceof kannst du den Typ eines Objektes testen


----------



## Guest (9. Apr 2008)

was meinst du mit vergessen?


----------



## SlaterB (9. Apr 2008)

du willst sie ja anscheindend nicht in deinem Programm benutzen, also nicht in irgendeiner Variablen oder anderen Liste speichern,

aber egal, mach mit den Strings, was du willst,
jedenfalls musst die erst alle auslesen, danach kannst du an die dahinterliegende ArrayList rankommen


----------



## Guest (9. Apr 2008)

Ich bräuchte im Fall 1 eine Abbruchbedingung damit ich nicht nur ein element in das Array eingeben kann sondern soviele bis ich zum Beispiel exit eingegeben habe wo muss ich das einsetzt?


----------



## SlaterB (9. Apr 2008)

eine Schleife und dann den eingelesenen String b prüfen, ob er exit entspricht,

falls dir ein oder beide Dinge unbekannt sind, sage ich schonmal vorsorglich, dass ich die nicht im Detail erklären werde,

wie man mit Kontrollstrukturen wie if oder Schleifen umgeht und was mit mit Strings standardmäßig alles anstellt
steht in jedem Lehrbuch


----------



## Guest (9. Apr 2008)

while(b.compareTo("Exit")!=0) habe ich eingesetzt aber wenn ich das Programm dann laufen lasse kommt ne endlossschleife


----------



## SlaterB (9. Apr 2008)

nix gelernt, zurück zu Seite 1: AUSGABEN sind das A, das O und alle 24 anderen Buchstaben des Programmieren-Alphabets,
deine Beschreibung der Endlosschleife hilft nicht besonders weiter

wenn du dagegen
System.out.println("b ist: "+b+", compareto Exit: "+b.compareTo("Exit"));
in dein Programm schreibst, und hier die Ausgaben aufführst, dann kann man damit arbeiten


nachdem das geklärt ist kannst du übrigens b.equals("Exit") verwenden


----------

