1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Diskettenspeicherung unter java

Discussion in 'Programmieren' started by philipp.geb, Apr 15, 2004.

Thread Status:
Not open for further replies.
  1. Hallo Leute! Bitte schau sich mal einer meinen Quelltext an und finde hier den Fehler...
    Keine Angst, das wird jetzt kein Ratespiel, aber vielleicht sieht es jemand:
    Ich habe ein Applet, das Daten in meiner Datebklasse in ein String [4]Array einträgt. Arrays werden dabei in ein Objekt der ArrayList eingetragen. Bis hierhin funktioniert auch alles, andere Klassen können auch auf die Daten zugreifen! Buttonklick im Applet löst Speichermethode in der Datenklasse aus-da ist das Problem: Das Laufwerk brummt kurz aber es schreibt nichts auf die Diskette!
    Vielleicht etwas unübersichtlich aber hier ist meine Datenklasse:
    import java.util.ArrayList;
    import java.io.*;
    /* Datenklasse enthält String-Array messages in Objekt ArrayList
    und Methoden um es zu bearbeiten, da das Applet nicht Datenträger
    beschreiben kann, ist hier die Diskettenspeicherung
    */
    class Datenklasse22{
    /* Beim Instanzieren in anderen Klassen ist Problem aufgetreten:
    Die Konstruktion mit "new" erzeugt ein neues Objekt, deshalb
    sind Einträge von Frame22 auch nur von dort aus sichtbar - gelten
    nicht für z.B. Applet22 usw. Logisch, "new" erzeugt immer ein neues
    Objekt! Deshalb folgende Konstruktion:
    */
    private static Datenklasse22 singletonObject;
    private Datenklasse22(){ //Konstruktor
    //Datenklasse22 kann nicht mehr von ausserhalb erzeugt werden
    }
    public static synchronized Datenklasse22 getSingletonObject(){//Zugriff auf diese Klasse
    if(singletonObject == null){ //...kann nur einmal erzeugt werden
    singletonObject = new Datenklasse22();
    }
    return singletonObject;
    }
    /* Zugriff auf Datenklasse22 jetzt nur noch über getSingletonObject(), d.h.
    alle Instanzen der anderen Klassen greifen auf das selbe Objekt zu.
    */
    //Deklaration der Klassenvariablen
    int x = 0; //x ist die Variable für die Messageanzahl
    int statS = 0; //Variable für Rückmeldung des Speichervorgangs
    //Instanzieren
    ArrayList zeilen = new ArrayList(); //Neues Objekt von ArrayList, java.util
    /*auch ArrayList(int initialCapacity) laut doku, hier Verwendung
    in der Defaulteinstellung mit 10 Einträgen, funktioniert
    aber auch mit 50 Einträgen!?
    */
    //Methodendeklaration zum Eintragen von Daten
    public void setzeM(String z1, String z2, String z3, String z4){
    String[] message = new String[4]; //"message" ist String Array
    message[0] = z1; //Übergabeparameter werden von den lokalen
    message[1] = z2; //Variablen an "message" übergeben
    message[2] = z3;
    message[3] = z4;
    zeilen.add(message); //und in die ArrayList eingetragen
    x++; //Messageanzahl +1
    }
    //Methodendeklaration zum Verändern von Daten
    public void setzeM(int xx, String z1, String z2, String z3, String z4){
    String[] array = (String[])zeilen.get(xx-1); //Zugriff auf "zeilen"
    array[0] = z1; //Übergabe der lokalen Variablen
    array[1] = z2;
    array[2] = z3;
    array[3] = z4;
    zeilen.set(xx-1, array); //und Eintrag in "zeilen"
    } //(xx immer um 1 vermindern -> Zugriff auf 0tes Element
    //Methode zum Auslesen y ist Nr. Eintrag, x ist Zeile 1 bis 4
    public String nenneM(int y, int z){
    return((String[])zeilen.get(y-1))[z-1];
    }
    //Methode gibt Messageanzahl zurück
    public int getx(){
    return x;
    }
    //Methode gibt Variable für Speichern-/Ladenrückmeldung
    public int statS(){
    return statS;
    }

    //Lade und Speicherroutinen:
    public void speichernM(){ //Methodenaufruf speichert aktuelles Array
    try{
    //Instanzierung
    ObjectOutputStream osM = new ObjectOutputStream(new FileOutputStream
    ("a:\\messages.dat"));
    osM.writeInt(x); //Speichern Anzahl der Messages
    osM.writeObject(zeilen); //Speichert Objekt "zeilen"
    osM.close(); //Outputstream schließen
    statS++; //statS +1
    }
    catch(Exception e){ //Ausnahmebehandlung
    statS = statS + 2; //statS +2
    }
    }
    public void ladenM(){ //Methodenaufruf läd Array
    x = 0; //->Daten werden vom 1.Feld an eingetragen
    try{
    ObjectInputStream isM = new ObjectInputStream(new FileInputStream
    ("a:\\messages.dat"));
    x = isM.readInt(); //Laden Anzahl Messages
    zeilen = (ArrayList)isM.readObject(); //Laden Objekt "zeilen"
    isM.close(); //Inputstream schließen
    statS = statS + 3; //statS +3
    }
    catch(Exception e){ //Ausnahmebehandlung
    statS = statS + 4; //statS +4
    }
    }
    }//Klassenklammer
     
  2. it-praktikant

    it-praktikant Megabyte

    Hallo,

    wenn der Buchstabensalat wenigstens in den CODE-Tags wäre, aber da schaut ja jetzt gar niemand mehr durch.

    Ciao it.
     
Thread Status:
Not open for further replies.

Share This Page