Zum Inhalt springen

Hilfeee: Lesen aus Textdatei und Serialisierung


musti

Empfohlene Beiträge

Hey Leute,

wir haben in Programmieren 2 eine Hausarbeit bis morgen zu machen.

Ich quäl mich schon seid wochen mit der aufgabe.

hab die ersten aufgaben alle hinbekomme. doch zum ende hin klappt gar nix mehr

1.h) Der Anwender des Projektes soll die Möglichkeit erhalten, einen vorher in einer Textdatei

gespeicherten Zustand einzulesen. Stellen Sie sicher, dass dabei die gleiche Information

nicht mehrfach im Programm gespeichert wird.

Wie mache ich das??? Ich kapier das nicht.

und

Serialisierung:

i) Entwerfen und erstellen Sie eine Methode, welche die gesamte Datenbank bzw. den Inhalt

der Spielzeugkiste in binärer Form in eine Datei zu serialisiert.

j) Entwerfen und erstellen Sie eine Methode, mit deren Hilfe die serialisierten Inhalte im

Programm wieder zur Verfügung gestellt werden können.

k) Nutzen die Möglichkeiten aus i) und j) um den Programmzustand beim Verlassen des

Programms zu sichern und die Datenstrukturen der Anwendung bei der Erstellung wieder

mit diesem Zustand zu initialisieren.

Davon habe ich Gar keine ahnung. wäre echt lieb, wenn ihr mir etwas weiterhilft.

hier mein Quelltext


import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.io.*;

import java.util.Scanner;

import java.util.*;




/**

 * Beschreiben Sie hier die Klasse DateiManager.

 * 

 * @author (Ihr Name) 

 * @version (eine Versionsnummer oder ein Datum)

 */

public class DateiManager implements Serializable

{

    private String[] splitArray;


    public void schreiben(Spielzeugkiste dieSpielzeugkiste, String dateiname)

    {

        ArrayList<Baukloetze> baukloetze;

        baukloetze = dieSpielzeugkiste.gibBaukloetze();


        try {

            File datei = new File(dateiname + ".txt");

            if(datei.exists())

            {

                System.out.println("Datei gibt es schon.");

            }

            else

            {

            FileWriter writer = new FileWriter(datei);


            for(Baukloetze bauklotz : baukloetze)

            {

                writer.write(bauklotz.toString());

                writer.write('\n');

                writer.write('\n');

            }

                writer.close();

            }

        }

        catch (IOException e) 

        {

            // beim Zugriff auf die Datei ist etwas schief gegangen

        }   

    }



    public void lesen(String dateiname)

    {

        String name = dateiname;

        String zeile = null;

        try {

            BufferedReader in = new BufferedReader(new FileReader(name + ".txt"));

            while ((zeile = in.readLine()) != null) 

            {

                System.out.println(zeile);

            }

        } catch (IOException e) {

            // beim Zugriff auf die Datei ist etwas schief gegangen

        }

    }


    public void Scan(String dateiname) throws FileNotFoundException

    {

        BufferedReader reader = new BufferedReader(new FileReader

        (dateiname + ".txt"));

        Scanner scanner = new Scanner(reader);

        while(scanner.hasNextLine())

        {

            String line = scanner.nextLine();

            splitArray = line.split(" ");

            for(int a = 2; a<= splitArray.length-1; a= a+3)

            {   

                System.out.println(splitArray[a]);

            } 

        }    


    } 


}


ist ein anfängerprogramm was mit bluej geschrieben worden ist.

also wenn fehler entdeckt werden, könnt ihr mir das sagen.

wäre echt lieb, wenn ihr mir weiterhelfen könntet

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du musst Deine Objekte serialisieren und dann in eine Datei schreiben bzw. wenn Du sie wieder herstellen willst, eben Datei öffnen und die Daten lesen.

Java bietet dafür das Interface Serializable an Serializable (Java 2 Platform SE v1.4.2)

Das ganze ist hier auch recht gut erklärt Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.12 Persistente Objekte und Serialisierung

Du musst eben nur in Deinem Datenbankobjekt die entsprechende Serializable Schnittstellen implementieren und dann kannst Du das Objekt via Datei Output bzw Inputstream schreiben und lesen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für mich sieht es so aus, als ob die zwei Aufgaben, zwei Lösungsansätze sind, um dasselbe Problem zu lösen. Einmal werden die Daten in einer Textdatei gespeichert, ein anderes mal in einer Binärdatei über die Seralisierung. Ob du wirklich beides machen musst, musst du selber wissen oder klären.

Für das Auslesen der Textdatei hast du anscheinent zwei Methoden. Warum? Außerdem Fehlt noch die Implementierung, um die Daten aus der Textdatei wieder zu Bauklotz-Objekten zusammen zu setzen. Hier wäre es nützlich zu wissen, was denn eigentlich gespeichert wird oder werden soll.

Eine gute Möglichkeit Daten systematisch in einer Textdatei zu speichern wäre eine CSV-Datei (Comma Separated Values).

CSV (Dateiformat) ? Wikipedia

Jede Zeile steht für einen Bauklotz. Die einzelnen Attribute werden durch ein Trennzeichhen getrennt (z.B. Semikolon oder Komma). Mit

line.split(TRENNZEICHEN);

erhälst du dann den Array mit den Attributen.

Mach dir doch ne Methode, die aus einem Bauklotz einen String mit Trennzeichen macht. Dann noch eine Methode, die aus einem String mit Trennzeichen wieder einen Bauklotz macht. Diese Methode rufst du für jeden Bauklotz auf, je nachdem ob gespeichert oder gelesen werden soll.

Gibt es denn nur Bauklötze in der Spieltzeugkiste?

Wie sind die Bauklötze genau aufgebaut?

Diese Antworten auf diese Fragen könnten wichtig sein. Auch in Bezug darauf:

Stellen Sie sicher, dass dabei die gleiche Information

nicht mehrfach im Programm gespeichert wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine gute Möglichkeit Daten systematisch in einer Textdatei zu speichern wäre eine CSV-Datei (Comma Separated Values).

[..]

Gibt es denn nur Bauklötze in der Spieltzeugkiste?

Wie sind die Bauklötze genau aufgebaut?

und genau aus diesem Grund gibt es das Interface Serializable, in jeder Klasse muss man dann das Interface implementieren, damit man dann die Objekte inkl der abhängigen Objekte serialisieren kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

so hab das mit dem Serialisiern hinbekommen


public void serialSpeichern(Spielzeugkiste dieSpielzeugkiste, String dateiname) 

    {

        OutputStream fos = null;

        try 

        { 

            fos = new FileOutputStream(dateiname + ".txt"); 

            ObjectOutputStream oos = new ObjectOutputStream(fos);

            oos.writeObject(dieSpielzeugkiste);

        }

        catch (IOException e)

        { 

            System.err.println(e); 

        } 

        finally 

        { 

            try 

            { 

                fos.close(); 

            } 

            catch (Exception e) 

            {} 

        }

    }


    public Spielzeugkiste deserial(String dateiname)

    {

        InputStream fis = null; 


        try

        {

            fis = new FileInputStream( dateiname + ".txt"); 

            ObjectInputStream ois = new ObjectInputStream(fis);

            return (Spielzeugkiste) ois.readObject();

        }

        catch (IOException e) 

        { 

            System.err.println(e); 

        }

        catch (ClassNotFoundException e) 

        { 

            System.err.println(e); 

        } 

        finally 

        { 

            try 

            { 

                fis.close();

            }

            catch (Exception e) 

            {} 

        }

        return null;

    }

}


Doch die aufgabe mit dem scnner macht mir riesige sorgen :(

danke für die hilfe :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...