Per for schleife string propertys in einer datei speichern

  • Themenstarter Themenstarter rAtze
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

rAtze

Gast
Code:
try
        {  
           Properties props = new Properties();
           File fileOfFinishedSchools = new File("breits_eingelesene_schulen.txt");
           props.load(new FileInputStream(fileOfFinishedSchools));
           int numberOfFinishedSchools = finishedSchoolsCB.getItemCount(); 
           
           for(int i = 0 ; i < numberOfFinishedSchools ; i++ )
           {
        	   String finishedSchools = finishedSchoolsCB.getItemAt(i).toString();
        	   System.out.println(finishedSchools);      	   
        	   props.setProperty("eingelesene_Schule", finishedSchools);
        	   props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule"); 
           }        
        }
    	
        catch (Exception e)
        {
             e.printStackTrace();             
        }

Wenn ich die 4 String einträge die sich in der JComboBox finishedSchoolsCB befinden auslese und mit
System.out.println(finishedSchools); in der for schleife ausgebe bekomme ich richtigerweise dies:

EKS
JKS
OHG
ASR eingelesen am 03/08/2007

wen ich dann in den nächsten 2 Zeilen:

Code:
props.setProperty("eingelesene_Schule", finishedSchools);
props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule");

den String finishedSchools einlese und in die Datei schreibe und danach die Datei öffne finde ich nur diesen Eintrag:

eingelesene_Schule=ASR eingelesen am 03/08/2007

warum nicht alle 4 Einträge? Oben werden mit System.out.println alles 4 ausgegeben ABER es werden nicht alle 4 der Datei hinzugefügt?? DAS ist mal VOLL unlogisch, sieht jemand den Fehler?
 
Wie Du in der API lesen kannst, implementiert die Klasse Properties das Interface Map. Und dort steht geschrieben:

An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
Das ist VOLL logisch.
Alles klaro? 🙂
 
NTB hat gesagt.:
Wie Du in der API lesen kannst, implementiert die Klasse Properties das Interface Map. Und dort steht geschrieben:

An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
Das ist VOLL logisch.
Alles klaro? 🙂

witzig dass ich das übersehen habe :lol:

verreck nochmal... warum geht das hier nicht?

Code:
for(int i = 0 ; i < numberOfFinishedSchools ; i++ )
           {  
        	   String finishedSchools = finishedSchoolsCB.getItemAt(i).toString();        	     
        	  
        	   props.setProperty("eingelesene_Schule"+i, finishedSchools +i);
        	   props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule"+i); 
           }

durch das angehängt "i" ist der key und der value jedesmal anders warum geht das nicht?
 
du hast gar kein System.out.println mehr drin, bist du sicher, dass es 4 Elemente sind?
wenn nur eins erscheint, welches? (welches i?)

bei mir gehts:
Code:
public class Test2
{
    public static void main(String[] args)
        throws Exception
    {
        String[] st = new String[]
            {"a", "b", "c", "d"};
        try
        {
            Properties props = new Properties();
            File fileOfFinishedSchools = new File("breits_eingelesene_schulen.txt");
            if (!fileOfFinishedSchools.exists())
            {
                fileOfFinishedSchools.createNewFile();
            }
            props.load(new FileInputStream(fileOfFinishedSchools));
            int numberOfFinishedSchools = st.length;

            for (int i = 0; i < numberOfFinishedSchools; i++)
            {
                String finishedSchools = st[i];
                System.out.println(finishedSchools);
                props.setProperty("eingelesene_Schule" + i, finishedSchools + i);
                props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule" + i);
            }
        }

        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}
 
du hast gar kein System.out.println mehr drin, bist du sicher, dass es 4 Elemente sind?
wenn nur eins erscheint, welches? (welches i?)

diese Zeile steht bei mir in der .txt datei. Diese Zeile befindet sich auch mit 3 anderen an letzter stelle in der Jcombobox:


eingelesene_Schule=ASR eingelesen am 03/08/2007

stop alles zurück LOL ich habe die komplette Methode kopiert und die ganze Zeit in der falschen Methode geändert...
:roll: :shock: :lol: Danke euch! :autsch:
 
wenn es langsam läuft, dann könntest du
props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule" + i);
aus der Schleife rausnehmen,

reicht, wenn du am Ende EINMAL die Datei erzeugst,
nicht für jeden Property ständig die vorhandene Datei überschreiben 😉
 
SlaterB hat gesagt.:
wenn es langsam läuft, dann könntest du
props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule" + i);
aus der Schleife rausnehmen,

reicht, wenn du am Ende EINMAL die Datei erzeugst,
nicht für jeden Property ständig die vorhandene Datei überschreiben 😉

yo ich machs erstmal grob und optimiere hinterher ;-) danke dir aber, eins noch...

so wird der key in die .txt geschrieben mit den "\" -zeichen im key ist an dieser Stelle ein Leerzeichen. Wie bekomme ich solch eine Ausgabe wie es eben im key ist?

eingelesene_Schule Nummer 0 =EKS

irgendwie muss man das regexxen?

eingelesene_Schule\ Nummer\ 0=EKS
 
verstehe nicht genau was du meinst, mit
Code:
String[] st = new String[]
            {"a", "b\"nummer\"", "c", "d"};
und meiner Programmversion erhalte ich in der Datei

eingelesene_Schule1=b"nummer"1


was willst du nun, was hast du für einen String und was steht falsch in der Datei?
in jedem Falle wüde ich mich hüten, im Key Leerzeichen oder Anführungsstriche einzubauen..
 
SlaterB hat gesagt.:
verstehe nicht genau was du meinst, mit
Code:
String[] st = new String[]
            {"a", "b\"nummer\"", "c", "d"};
und meiner Programmversion erhalte ich in der Datei

eingelesene_Schule1=b"nummer"1


was willst du nun, was hast du für einen String und was steht falsch in der Datei?
in jedem Falle wüde ich mich hüten, im Key Leerzeichen oder Anführungsstriche einzubauen..
richtig daher habe ich es so gemacht, Ausgabe:

ingelesene.Schule.Nummer.0
#Fri Aug 03 16:57:07 CEST 2007
eingelesene.Schule.Nummer.0=ASR erledigt am 03.08.2007
 
SlaterB hat gesagt.:
wenn es langsam läuft, dann könntest du
props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene_Schule" + i);
aus der Schleife rausnehmen,

reicht, wenn du am Ende EINMAL die Datei erzeugst,
nicht für jeden Property ständig die vorhandene Datei überschreiben 😉

ups überlesen.... ja wenn ich die Datei nach der for schleife erzeuge, wie sieht dann das props.store( , ); aus ? das "i" muss ja in die schleife sonst habe ich das alte problem wieder an der Backe.
 
Code:
try
        {  
           Properties props = new Properties();
           File fileOfFinishedSchools = new File("breits_eingelesene_schulen.txt");
           props.load(new FileInputStream(fileOfFinishedSchools));           
           int numberOfFinishedSchools = finishedSchoolsCB.getItemCount(); 
           
           for(int i = 0 ; i < numberOfFinishedSchools ; i++ )
           {  
        	   String finishedSchools = finishedSchoolsCB.getItemAt(i).toString();
        	   props.setProperty("eingelesene.Schule.Nummer."+i, finishedSchools);
        	   props.store(new FileOutputStream(fileOfFinishedSchools), "eingelesene.Schule.Nummer."+i); 
        	   System.out.println(finishedSchools);
           }    
           props.setProperty("Anzahl.Schulen",String.valueOf(numberOfFinishedSchools));
           props.store(new FileOutputStream(fileOfFinishedSchools),"Anzahl.Schulen");
           System.out.println(numberOfFinishedSchools);
        }

Ausgabe mit obigem System.out.println... :

ASR
EDS
MPG
ASR erledigt am 03.08.2007
4


Ausgabe in der Datei:

#Anzahl.Schulen
#Fri Aug 03 20:05:43 CEST 2007
eingelesene.Schule.Nummer.2=MPG
eingelesene.Schule.Nummer.1=EDS
eingelesene.Schule.Nummer.0=ASR
Anzahl.Schulen=4
eingelesene.Schule.Nummer.3=ASR erledigt am 03.08.2007

Warum um himmels willen ist die "4" hier nicht am Ende ?
 
> ja wenn ich die Datei nach der for schleife erzeuge, wie sieht dann das props.store( , ); aus ? das "i" muss ja in die schleife sonst habe ich das alte problem wieder an der Backe.

das Datei schreiben hat nichts mit den Namen der Properties zu tun,
was du bei store übergibst, ist nur ein unabhängiger Kommentar

siehe dein Ausgabe: da ist #Anzahl.Schulen der Kommentar ganz oben in der Datei

> Warum um himmels willen ist die "4" hier nicht am Ende ?

warum sind die i nicht sortiert?
ich schätze da liegt standardmäßig keine Reichenfolge for
(und nein, ich zumindest kann dir nicht sagen wie du eine Reihenfolge bekommst)
 
Das ist eine HashMap hinter, also wird sie wohl nach den Hashkeys sortiert.
Die Properties Datei ist ja auch nicht dazu gedacht, irgendwas sortiert in eine Datei zu schreiben.
 
SlaterB hat gesagt.:
> ja wenn ich die Datei nach der for schleife erzeuge, wie sieht dann das props.store( , ); aus ? das "i" muss ja in die schleife sonst habe ich das alte problem wieder an der Backe.

das Datei schreiben hat nichts mit den Namen der Properties zu tun,
was du bei store übergibst, ist nur ein unabhängiger Kommentar

siehe dein Ausgabe: da ist #Anzahl.Schulen der Kommentar ganz oben in der Datei

> Warum um himmels willen ist die "4" hier nicht am Ende ?

warum sind die i nicht sortiert?
ich schätze da liegt standardmäßig keine Reichenfolge for
(und nein, ich zumindest kann dir nicht sagen wie du eine Reihenfolge bekommst)

völliger quark mit den properties... lese die combobox einfach zeilenweise aus und zeilenweise ein in eine .txt datei ist am einfachstem wenn das ganze sprich ASR,Datum getrennt ist. Bringe morgen ein Beispiel...
 
Keywords: txt text string jcombobox datei abspeichern einlesen auslesen


In Datei schreiben:

Code:
try
       {
    	   String volume = System.getProperty("user.dir");
    	   BufferedWriter file = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(volume + "/" + "breits_eingelesene_schulen.txt")));
    	   String line;
    	   String finishedSchools;
    	   int numberOfFinishedSchools = finishedSchoolsCB.getItemCount();
    	   
    	   for(int i = 0 ; i < numberOfFinishedSchools ; i++)
      	   { 
    		   finishedSchools = finishedSchoolsCB.getItemAt(i).toString();         		 
      		              line = finishedSchools + "\r\n";
      		   file.write(line);
      	   }        	   
    	   file.close();
    	   
       }
       catch (Exception e)
       {
          e.printStackTrace();
       }

Ausgabe:

ASR erledigt am 03.08.2007
EDS erledigt am 03.08.2007
MPG erledigt am 03.08.2007
ASR erledigt am 04.08.2007


Aus Datei lesen:

Code:
try
        {
    	  String volume = System.getProperty("user.dir");	
          String line;
          BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(volume + "/" + "breits_eingelesene_schulen.txt")));
          
          while((line = file.readLine())!= null )
          {
             finishedSchoolsCB.addItem(line); 
          }
          file.close();
        }
        catch (Exception e)
        {
           e.printStackTrace();
        }

Eingabe in der JCombobox siehe genau wie Ausgabe.

Hat jemand noch verbesserungsvorschläge?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben