Daten in ArrayList speichern

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ist es möglich durch Tastatureingabe ( InputStreamReader) Daten in einer ArrayList zu speichern?
Wenn ja wie kann man das machen.Thx.
 
ja du kannst die daten die du einliest(von tastatur) in der arrayliste speichern. Einfach neu datensätze hinzufügen ging glaub mit add.
 
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
 
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 ??
 
Code:
// 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]
 
wenn ich das dort mit c.add(speichern) mache passiert aber nichts 🙁
 
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
 
Code:
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");
		}
 
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.
 
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
 
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.
 
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?
 
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 !!
 
Code:
// 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");
			        }
 
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
 
ach so das Problem liegt daran wesehlb es noch nicht funktioniert hat beim c.add(speichern) er kennt speichern nicht
 
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.)
 
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
 
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
 
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 😀
 
ich habs yeahhhhhhhhhhhhhhhhhh super danke für deine Hilfe hast mir sehr geholfen daumenhoch !!! hast mir den Tag gerettet hehe
 
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?
 
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?
 
doch um die Elemente wieder abzufragen muss ich das Programm neu Starten dann sind wieder nur 4 drin
 
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
 
was rätst du mir was ich nun tun soll die Daten sollten schon immer in der ArrayList bestehen bleiben
 
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
 
Wenn du mir jetzt noch verrätst womit ich die ArrayListe in eine Datei schreibe bin ich zufrieden 😉
 
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
 
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.

Code:
//	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");

Code:
 //	 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;
 
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
 
Ich möchte aber in Fall 1 beides speichern ArrayList und Tastatureingaben.
Gibt es eine Möglichkeit in Fall 2 trotzdem beides getrennt auszulesen
 
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
 
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
 
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?
 
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
 
while(b.compareTo("Exit")!=0) habe ich eingesetzt aber wenn ich das Programm dann laufen lasse kommt ne endlossschleife
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben