Csv Datei in Java einlesen

farbenlos

Mitglied
Hi, ich muss eine Fitnesscenter Website erstellen und versuche bei meiner Mitgliederliste eine Csv Datei zu implementieren.
Ich hab alles versucht, doch wird mir bei der Ausgabe nichts angezeigt. Kann mir da jmd weiterhelfen?
Hier ist der Programmcode:

Java:
import java.awt.EventQueue;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class mitgliederListe extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTable tableMliste;
    private JTextField textField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    mitgliederListe frame = new mitgliederListe();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public mitgliederListe() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 830, 734);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblMitgliederListe = new JLabel("MITGLIEDER LISTE");
        lblMitgliederListe.setFont(new Font("Tahoma", Font.PLAIN, 26));
        lblMitgliederListe.setBounds(310, 88, 244, 34);
        contentPane.add(lblMitgliederListe);

        JScrollBar scrollBarMliste = new JScrollBar();
        scrollBarMliste.setBounds(671, 212, 40, 279);
        contentPane.add(scrollBarMliste);

        tableMliste = new JTable();
        tableMliste.setBounds(70, 214, 598, 277);
        contentPane.add(tableMliste);


        JButton btnZurueck = new JButton("ZURÜCK");
        btnZurueck.setFont(new Font("Tahoma", Font.PLAIN, 20));
        btnZurueck.setBounds(521, 582, 147, 56);
        contentPane.add(btnZurueck);

    }

    public class Main {
        public static void main(String[] args) throws FileNotFoundException {
            File getCSVFiles = new File("C:\\Users\\K\\eclipse-workspace\\OOP2023\\src\\Projektarbeit.xlsx.csv");
            Scanner sc = new Scanner(getCSVFiles);
            sc.useDelimiter(",");
            while (sc.hasNext()) {
                System.out.print(sc.next() + " | ");
            }
            sc.close();
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

KonradN

Super-Moderator
Mitarbeiter
Hallo,

erst einmal willkommen im Forum.

Als erstes ein allgemeiner Hinweis: Code bitte in Code Tags posten. Dies geht am einfachsten über den Knopf </> links oberhalb des Eingabebereiches. Ich werde schauen, ob ich das gleich im Anschluss für Dich beheben kann.

Dann bezieht sich das Problem
Ich hab alles versucht, doch wird mir bei der Ausgabe nichts angezeigt.
vermutlich auf den Zweiten Teil - die Klasse Main.
Wenn die Datei so wirklich existiert und du wirklich beim Ausführen die Main Klasse startest und nicht die andere Klasse, dann müsste eine Ausgabe kommen so die Datei nicht leer ist.

Daher wäre es evtl. sinnvoll, das Problem etwas mehr einzugrenzen - könntest Du einmal genau zeigen, was Du ausführst und was Du da alles für Ausgaben bekommst? Wenn Du es in einer Entwicklungsumgebung ausführst, dann müsstest Du eine Art Konsolen-Fenster bekommen, in dem der genaue Aufruf und auch alle Ausgaben zu sehen sind.

Unabhängig von dem genauen Problem evtl. noch ein paar mehr Hinweise. Lass Dich davon aber nicht verwirren und sollte da etwas unklar sein, dann frag gerne nach:
a) Klassen sollten immer mit einem großen Buchstaben anfangen. Also MitgliederListe statt mitgliederListe.
b) Favor Composition over Inheritance (FCoI): Du erbst von JFrame. Das eigentliche Verhalten von JFrame willst Du aber nicht anpassen und Du willst kein spezialisiertes JFrame haben. Evtl. willst Du Dir das näher ansehen. (Über Google finden sich viele Beschreibungen, u.a. die Wikipedia Seite erklärt das relativ gut).
c) Evtl. willst Du Dir "try with resources" ansehen. Du öffnest den Scanner und willst diesen am Ende schließen. Damit man sicher stellt, dass der Scanner auf jeden Fall geschlossen wird auch bei Exceptions und Co sollte man try-with-resources verwenden oder alles in ein try / finally packen.
 

M.L.

Top Contributor
Ist die Zieldatei überhaupt mit Inhalten gefüllt ? Haben andere Prozesse auf die Zieldatei lesenden/schreibenden Zugriff ? Im Rohzustand (und einer Test-csv-Datei (auch als .xlsx.csv) von hier ) hat der Quellcode jedenfalls funktioniert:

Eclipse_csv_xlsx_einlesen.JPG
 

KonradN

Super-Moderator
Mitarbeiter
Beim Bearbeiten habe ich dann auch noch etwas gesehen: Die Klasse Main ist eine innere Klasse von mitarbeiterListe. Das ist vermutlich nicht so gewollt, oder? Evtl. hast Du also auch nicht mitarbeiterListe.Main.main(..) gestartet? Das nur als Vermutung.
 

8u3631984

Bekanntes Mitglied
Die main Methode existiert 2x
Java:
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        ...

und wie KonradN schon erwähnt hat an dieser Stelle :

Code:
    public class Main {
        public static void main(String[] args) throws FileNotFoundException {

Nun die Frage : Wie sieht deine Run Configuration aus - also welche der beiden Methoden rufst du auf ?
 

M.L.

Top Contributor
Webseite oder doch Desktop Applikation ? Für Webseiten könnte man sich JavaFX (oder andere Frameworks wie React, Vue.JS, Vanilla Web,...) ansehen

Nach einer Änderung in der angesprochenen "Run Configuration" (Löschen des Parameters $Main bei "Main Class" und (neues) Ausführen des Projekts) sieht man eine Swing UI (Screenshots als Anhang)
 

Anhänge

  • Eclipse_Run_Configuration_mit_Main.png
    Eclipse_Run_Configuration_mit_Main.png
    45,7 KB · Aufrufe: 0
  • Eclipse_Swing_ohne_DollarMain.png
    Eclipse_Swing_ohne_DollarMain.png
    9,3 KB · Aufrufe: 0

farbenlos

Mitglied
Hi, danke für die schnellen Antworten. Ich habe das Problem mit Jtable gelöst. doch hätte ich eine andere Frage:
Wie kann ich bei meiner Tabelle, wenn ich eine Zeile hinzufüge oder lösche, es bei meiner CSV Datei speichern, weil jedesmal, wenn ich wieder zurückgehe sind die Daten die ich eingespeichert habe, nicht mehr vorhanden in der Tabelle?
 

Anhänge

  • Mitglieder.java
    2,8 KB · Aufrufe: 0
  • MitgliederVerwaltung.java
    6,4 KB · Aufrufe: 0
  • NeuesMitglied.java
    6,5 KB · Aufrufe: 0
  • Verwaltung.java
    3,3 KB · Aufrufe: 0

TomBombadil

Mitglied
Ich hab mir deinen Code angeschaut, ich würde dir empfehlen Ihn auf jeden Fall mal besser zu kapseln, z.b. die CSV Verwaltung in eine eigene Klasse packen.
Du könntest dann eine Methode bauen die die komplette CSV in den Arbeitsspeicher läd, dort kannst du dann die Daten verändern und anschließend lässt du die CSV komplett neu schreiben. Bei Fragen gerne Fragen.

Was du auch machen kannst ist die Bibliothek SuperCSV benutzen.
Ich würde dir aber empfehlen wenn das Projekt evtl. auch noch größer werden soll optionen wie JSON dafür gibt es die Bibliothek GSON oder auch Sqlite Bibliothek Sqlite.JDBC verwenden.

Alternativ kannst du meine kleinen CSVManager verwenden, allerdings ohne Garantie. Hab ihn schon sehr lange nicht mehr eingesetzt.

Jetzt hast du ein paar optionen, bei Fragen gerne Fragen
 

Anhänge

  • CSVDatei.java
    3,3 KB · Aufrufe: 0
  • CSVZeile.java
    1,1 KB · Aufrufe: 0

TomBombadil

Mitglied
Hi, danke für die schnellen Antworten. Ich habe das Problem mit Jtable gelöst. doch hätte ich eine andere Frage:
Wie kann ich bei meiner Tabelle, wenn ich eine Zeile hinzufüge oder lösche, es bei meiner CSV Datei speichern, weil jedesmal, wenn ich wieder zurückgehe sind die Daten die ich eingespeichert habe, nicht mehr vorhanden in der Tabelle?
ich habe nochmal ein wenig getippt und die Klassen sauber neu geschrieben. Die Funktionieren jetzt ganz gut auch zum austauschen von Werten
 

Anhänge

  • CSVDatei.java
    2,9 KB · Aufrufe: 0
  • CSVZeile.java
    1,7 KB · Aufrufe: 0

mihe7

Top Contributor
ich habe nochmal ein wenig getippt und die Klassen sauber neu geschrieben. Die Funktionieren jetzt ganz gut auch zum austauschen von Werten
Dazu mal ein kurzes Feedback von mir. Ich bin die beiden Files mal kurz durchgegangen und hätte da ein paar Punkte...

Zunächst einmal gibt es keinen Grund, von File zu erben. Dann sollte man berücksichtigen, dass ein Ressource auch im CSV-Format richtig groß werden kann. Außerdem kann man sich überlegen, was das Lesen mit dem Schreiben zu tun hat, d. h. ob man dem Schreiben nicht eine separate Klasse spendiert.

Dann hätte ich noch einen Fehler: CSVZeile#replaceValue berücksichtigt nicht, dass zeilentext eine String und damit immutable ist. Bei createZeilenText vermisse ich irgendwie das Trennzeichen, keine Ahnung, ob das so gewollt ist. createValues ist mir zu kompliziert, warum nimmst Du nicht einfach die split-Methode von String? Ich würde mir auch überlegen, ob es sinnvoll ist, dass man den Text und das Trennzeichen im Nachhinein noch ändern kann.

In CSVDatei kannst Du statt eines StringBuilders auch einen StringJoiner verwenden, wobei hier die Frage ist, ob die letzte Zeile mit einem Zeilenende abgeschlossen werden soll. createLines, removeLine -> String#split. Angesichts der ganzen String-Operationen kommen auch Zweifel auf, ob ein String zum Speichern mehrerer Zeilen/Spalten die geeignet Wahl ist 😉
 

Hough

Mitglied
Nach meinem Verständnis läßt sich eine CSV-Zeile nicht einfach mit split oder der Scanner-Klasse parsen. Der Fall, dass ein Feld in Hochkommata eingeschlossen ist und sich darin ein Trennzeichen befindet, an dem selbstverständlich nicht gesplittet werden sollte, muß ja auch berücksichtigt werden.

"Inhalt, mit Komma", 75, "zwei Worte"

würde bei Verwendung mit split oder dem Java-Scanner aufgeteilt werden in

"Inhalt
mit Komma"
75
"zwei Worte"

Zu erwarten wäre aber

Inhalt, mit Komma
75
zwei Worte

Beim Erzeugen einer CSV-Datei müßte ebenfalls der Inhalt eines Feldes entweder auf vorhandene Trennzeichen abgeprüft oder grundsätzlich alle Felder in Hochkommata eingeschlossen werden.
Sollten in einem Feld Hochkommata vorhanden sein, müßte auch dafür eine Behandlung gefunden werden (z.B. Maskierung mit Backslash)
 

farbenlos

Mitglied
ich habe nochmal ein wenig getippt und die Klassen sauber neu geschrieben. Die Funktionieren jetzt ganz gut auch zum austauschen von Werten
Hey, danke dir, ich hätte da noch ne Frage. Weißt du vielleicht, wie man bei der Tabelle mit dem Änderung speichern Button, die Daten aktualisiert werden und diese in der Csv Datei angezeigt wird?
 

Anhänge

  • Verwaltung.java
    3,3 KB · Aufrufe: 0
  • NeuerFitnesskurs.java
    5,3 KB · Aufrufe: 0
  • FitnesskursVerwaltung.java
    6,1 KB · Aufrufe: 0
  • Fitnesskurs.java
    3 KB · Aufrufe: 0

TomBombadil

Mitglied
Dazu mal ein kurzes Feedback von mir. Ich bin die beiden Files mal kurz durchgegangen und hätte da ein paar Punkte...

Zunächst einmal gibt es keinen Grund, von File zu erben. Dann sollte man berücksichtigen, dass ein Ressource auch im CSV-Format richtig groß werden kann. Außerdem kann man sich überlegen, was das Lesen mit dem Schreiben zu tun hat, d. h. ob man dem Schreiben nicht eine separate Klasse spendiert.

Dann hätte ich noch einen Fehler: CSVZeile#replaceValue berücksichtigt nicht, dass zeilentext eine String und damit immutable ist. Bei createZeilenText vermisse ich irgendwie das Trennzeichen, keine Ahnung, ob das so gewollt ist. createValues ist mir zu kompliziert, warum nimmst Du nicht einfach die split-Methode von String? Ich würde mir auch überlegen, ob es sinnvoll ist, dass man den Text und das Trennzeichen im Nachhinein noch ändern kann.

In CSVDatei kannst Du statt eines StringBuilders auch einen StringJoiner verwenden, wobei hier die Frage ist, ob die letzte Zeile mit einem Zeilenende abgeschlossen werden soll. createLines, removeLine -> String#split. Angesichts der ganzen String-Operationen kommen auch Zweifel auf, ob ein String zum Speichern mehrerer Zeilen/Spalten die geeignet Wahl ist 😉
Vielen Dank für das konstruktive Feedback. Ich werde schauen das ich die Verbesserungsvorschläge bald umsetze.
Hatte grade nicht so viel Zeit daher meine Antwort erst jetzt.

Edit:
Wobei ich schon Finde das das erben von File in sofern Sinn macht da ich ja Dateien verwalten möchte und somit ist es von Vorteil wenn die Klasse CSVDatei über die fähigkeiten von File verfügt. Aber ich habe da noch eine andere Idee bekommen die ich denke ich heut umsetzen werde, ein brauchbarer CSVParser kann ja ganz nützlich sein.
Zur Performance des ganzen denke ich muss ich da nicht so sehr drauf achten da ich CSV Dateien wenn dann nur für kleine Datenmengen verwenden würde. Für alles was größer ist kommen dann eher Datei basierte Datenbanken wie Sqlite, HSQLDB, oder H2 in frage.
 
Zuletzt bearbeitet:

TomBombadil

Mitglied
Nach meinem Verständnis läßt sich eine CSV-Zeile nicht einfach mit split oder der Scanner-Klasse parsen. Der Fall, dass ein Feld in Hochkommata eingeschlossen ist und sich darin ein Trennzeichen befindet, an dem selbstverständlich nicht gesplittet werden sollte, muß ja auch berücksichtigt werden.

"Inhalt, mit Komma", 75, "zwei Worte"

würde bei Verwendung mit split oder dem Java-Scanner aufgeteilt werden in

"Inhalt
mit Komma"
75
"zwei Worte"

Zu erwarten wäre aber

Inhalt, mit Komma
75
zwei Worte

Beim Erzeugen einer CSV-Datei müßte ebenfalls der Inhalt eines Feldes entweder auf vorhandene Trennzeichen abgeprüft oder grundsätzlich alle Felder in Hochkommata eingeschlossen werden.
Sollten in einem Feld Hochkommata vorhanden sein, müßte auch dafür eine Behandlung gefunden werden (z.B. Maskierung mit Backslash)
Um derlei Probleme zu umgehen hat sich meines Kenntnisstandes das ; als Trennzeichen eingebürgert weil es im normalen Sprachgebrauch praktisch nicht vorkommt, und somit keine Probleme beim Parsen macht. Aber ich würde heute CSVParser immer so entwickeln das das Trennzeichen über eine Variable frei definiert werden kann.
 

Hough

Mitglied
Um derlei Probleme zu umgehen hat sich meines Kenntnisstandes das ; als Trennzeichen eingebürgert weil es im normalen Sprachgebrauch praktisch nicht vorkommt, und somit keine Probleme beim Parsen macht. Aber ich würde heute CSVParser immer so entwickeln das das Trennzeichen über eine Variable frei definiert werden kann.
Das auf jeden Fall. Andererseits sind die Hochkommata auch extra deswegen, um kenntlich zu machen, dass alles, was innerhalb ist, nicht als Trennzeichen interpretiert werden darf. Letztlich ist es auch kein Hexenwerk, einen CSV-Parser zu schreiben, der das berücksichtigen kann.
 

mihe7

Top Contributor
Wobei ich schon Finde das das erben von File in sofern Sinn macht da ich ja Dateien verwalten möchte und somit ist es von Vorteil wenn die Klasse CSVDatei über die fähigkeiten von File verfügt.
Nein, das sieht nur auf den ersten Blick so aus.

Ich versuche es mal zu erklären. Dazu möchte ich zwei Begriffe unterscheiden: Datei und Dokument. Eine Datei ist im Folgenden einfach ein Objekt in einem Dateisystem, also etwas, das auf einem Datenträger gespeichert ist, über Attribute wie Namen, Erstellungszeitpunkt, Berechtigungen etc. verfügt und durch einen Pfad identifizierbar ist. Im Dateisystem lassen sich auf den Dateien bestimmte Operationen ausführen sind wie z. B. erzeugen, löschen, umbennen usw. Ein Dokument hingegen soll Inhalte bezeichnen, die kodiert in einer Datei gespeichert werden können.

Ein CSV-Dokument ist also eine speziell formatierte Zeichenfolge. Diese kann in einer Datei gespeichert sein, muss aber nicht: ein CSV-Dokument kann über eine Netzwerkverbindung (oder gar nur über ein serielles Kabel) bezogen, von der Standardeingabe gelesen oder auch über die Zwischenablage übermittelt werden. Theoretisch kann ich es auch direkt eintippen. Das alles hat mit Dateien rein gar nichts zu tun.

Wenn wir jetzt das CSV-Dokument mit einer Datei in einer Klasse vermischen, dann erhalten wir eine Klasse, die sehr speziell ist und nur mit Dateien umgehen kann. Diese Klasse ist für mehrere Dinge zuständig, die nichts miteinander zu tun haben; wir reden in einem solchen Fall von einem Verstoß gegen das SRP (Single Responsibility Principle). Wenn Du jetzt etwas brauchst, das ein CSV-Dokument von einer URL liest, müsstest Du nach Deiner Logik eine weitere Klasse schreiben, die von URL ableitet. 99 % des Codes wäre aber identisch -> nix gut.

Lassen wir die Verantwortlichkeiten dort, wo sie hingehören, dann ist java.util.File für das Objekt im Dateisystem zuständig. Der CSV-Parser ist ausschließlich für das Parsen des CSV-Dokuments zuständig. Wie kommt der Parser aber nun an die Inhalte? Eine Möglichkeit wäre ein String, der aber den Nachteil hat, dass er sich im Speicher befindet. Wir wählen daher in der Regel etwas abstrakteres: Streams, also etwas wie InputStreams.

Streams arbeiten zunächst mit binären Daten. Um mit Text arbeiten zu können, müssen die binären Daten als Zeichen interpretiert werden. Das erledigt in Java ein java.io.Reader.

Wenn Dein Parser also einen Reader verwendet, muss er sich weder um a) die Herkunft der Daten und b) noch um das Encoding kümmern.

Mal eine Skizze für einen einfachen Parser ohne Textqualifizierer:

Java:
public class CsvParser {
    public static final String DEFAULT_FIELD_SEPARATOR = ";";
    private final int linesToSkip;
    private final String fieldSeparator;

    public CsvParser() {
        this.linesToSkip = 0;
        this.fieldSeparator = DEFAULT_FIELD_SEPARATOR;
    }

    public CsvParser(final String fieldSeparator, final int linesToSkip) {
        this.fieldSeparator = fieldSeparator;
        this.linesToSkip = linesToSkip;
    }

    public List<Row> parse(Reader reader) {
        return stream(reader).toList();
    }

    public Stream<Row> stream(Reader reader) {
        BufferedReader input = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
        return input.lines().skip(linesToSkip).map(this::parseLine);
    }

    private Row parseLine(String line) {
        String[] parts = line.split(fieldSeparator);
        return new Row(parts);
    }
}
 

LimDul

Top Contributor
Edit:
Wobei ich schon Finde das das erben von File in sofern Sinn macht da ich ja Dateien verwalten möchte und somit ist es von Vorteil wenn die Klasse CSVDatei über die fähigkeiten von File verfügt. Aber ich habe da noch eine andere Idee bekommen die ich denke ich heut umsetzen werde, ein brauchbarer CSVParser kann ja ganz nützlich sein.
Zur Performance des ganzen denke ich muss ich da nicht so sehr drauf achten da ich CSV Dateien wenn dann nur für kleine Datenmengen verwenden würde. Für alles was größer ist kommen dann eher Datei basierte Datenbanken wie Sqlite, HSQLDB, oder H2 in frage.
Als Ergänzung zum bereits guten Beitrag von @mihe7.

Grundsätzlich sollte man Vererbung nur sehr sparsam einsetzen. Gibt da den Begriff "composition over inheritance", sprich lieber Komposition als Vererbung. Vererbung ist ein extrem starkes Pattern mit einer sehr sehr engen Koppelung. Das macht man nicht, wenn man Funktionalitäten nutzen will (da nutzt man Komposition) sondern wenn eine "is-a" also eine "Ist ein" Beziehung hat. Mit Vererbung sagt man: Meine CSVDatei kann ich überall verwenden wo ich auch File verwenden kann und sie verhält sich immer so, wie der Contract von File vorgibt. Sie ist nur in manchen Eigenschaften spezialisierter als File. Und das ergibt an der Stelle keinen Sinn.

Den z.B. sagt der Contract von File:

* <p> Instances of the {@code File} class are immutable; that is, once
* created, the abstract pathname represented by a {@code File} object
* will never change.
Den verletzt du.

So bietet File die Methode getAbsoluteFile an.

Was passiert, wenn du folgendes macht:
Code:
CSVDatei csvDatei = new CSVDatei(...);
csvDatei.getAbsoluteFile(); // Was kommt hier zurück?
Da kommt ein File-Objekt zurück, kein CSVDAtei Objekt.

Sprich Vererbung ist an der Stelle schlicht falsch. Man neigt gerne dazu Vererbung zu nutzen - aber meistens ist es falsch.
 

TomBombadil

Mitglied
Hey, danke dir, ich hätte da noch ne Frage. Weißt du vielleicht, wie man bei der Tabelle mit dem Änderung speichern Button, die Daten aktualisiert werden und diese in der Csv Datei angezeigt wird?

@farbenlos ich habe jetzt tatsächlich weil mir langweilig war den CSVParser nochmal angepasst und fürs speichern in dein Projekt implementiert.
die Methode zum Laden der Daten aus der csv darfst du dann noch schreiben. ;)

Java:
            /*
             * Da die Anzahl der Zeilen vermutlich maximal im 3-4 stelligen Bereich liegt kann
             * die CSVDatei einfach ohne Probleme neu geschrieben werden
             * die Methode csvDatei.writeToFile(file) überschreibt die Datei
             */
            private void saveTableDataToCSV(File file) {
                String trennzeichen = ";";
                CSVDatei csvDatei = new CSVDatei(trennzeichen);
                
                // diese Schleife geht über die Zeilen der JTable
                for (int i = 0; i < tableFitnesskurs.getRowCount(); i++) {
                    
                    // diese Schleife geht über die Spalten in einer Zeile der JTable
                    CSVZeile curzeile = new CSVZeile(trennzeichen);
                    for (int j = 0; j < tableFitnesskurs.getColumnCount(); j++) {
                        curzeile.addValue(tableFitnesskurs.getValueAt(i, j).toString());
                    }
                    csvDatei.addZeile(curzeile);
                }
                
                if (csvDatei.writeToFile(file)) {
                    JOptionPane.showMessageDialog(this, "Ihre Änderung wurde gespeichert!");
                } else {
                    JOptionPane.showMessageDialog(this, "Speichern fehlgeschlagen! Entwickler kontaktieren");
                }
            }

Habe den Code auch schon getestet er funktioniert.
Wenn dein Projekt aber an Umfang zunimmt macht es Sinn auf ein Datenbanksystem wie HSQLDB, oder H2 zurückzugreifen. Datenbanken sind extra dafür entwicklelt um mit großen Datenmengen umgehen zu können, diesen Vorteil sollte man nutzen!
Ich habe dasd vollständige EclipseProjekt exportiert und für dich in eine zip im Anhang gepackt.


@LimDul und @mihe7
Danke für die Erklärungen die sind echt gut
 

Anhänge

  • Fitnesskurs.zip
    60,5 KB · Aufrufe: 0
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Datei in Java einlesen Java Basics - Anfänger-Themen 13
L Input/Output Datei in Java einlesen Java Basics - Anfänger-Themen 9
S .txt-Datei in Java einlesen Java Basics - Anfänger-Themen 6
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
S In Datei schreiben in Java? Java Basics - Anfänger-Themen 1
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
nbergmann Installation unter jdk.java.net: Keine ZIP-Datei zum entpacken Java Basics - Anfänger-Themen 2
Kotelettklopfer Sqlite DB aus Java Datei ansprechen. Java Basics - Anfänger-Themen 147
L Java erstellt leere Datei Java Basics - Anfänger-Themen 8
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
S Verbindung von einer Excel Datei zu Java-- Java Basics - Anfänger-Themen 4
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
J Java Datei als exe weitergeben Java Basics - Anfänger-Themen 3
A .txt-Datei mit Java speichern Java Basics - Anfänger-Themen 2
M Java Mysql ausführbare datei Java Basics - Anfänger-Themen 7
alkaA Intellij Java Datei aus nicht Projekt ausführen? Java Basics - Anfänger-Themen 2
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
diqqerrr Java Datei als .exe ausführen Java Basics - Anfänger-Themen 8
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
A Java-Datei refaktorieren Java Basics - Anfänger-Themen 3
M In einer Datei schreiben - Java Java Basics - Anfänger-Themen 3
O Javac findet die .java datei nicht Java Basics - Anfänger-Themen 2
F PDF Datei in Java einbinden Java Basics - Anfänger-Themen 22
S .java Datei in java Datei ausführen Java Basics - Anfänger-Themen 9
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Java - Abspielen einer wav Datei Java Basics - Anfänger-Themen 2
L Java Text datei nur bis zu einem Punkt auslesen? Java Basics - Anfänger-Themen 3
I Klassen Mehrere Java Klassen in einer .java Datei Java Basics - Anfänger-Themen 7
1 Im Java Projekt eine txt datei einbinden? Java Basics - Anfänger-Themen 8
J Eingabeaufforderung stürzt ab (beim Ausführen einer Java-Datei) Java Basics - Anfänger-Themen 3
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3
Z Java txt Datei erstellen lassen Java Basics - Anfänger-Themen 6
0 Über CMD die JAVA Datei ausführen? möglich? Java Basics - Anfänger-Themen 8
M Java Datei soll sich selbst löschen Java Basics - Anfänger-Themen 8
M Datei starten mit Java Java Basics - Anfänger-Themen 3
D java Datei ausführen? Java Basics - Anfänger-Themen 4
Fab1 alte Java Datei wird ausgeführt (trotz Änderung) Java Basics - Anfänger-Themen 4
M Java-Datei in Ordner Kopieren Java Basics - Anfänger-Themen 12
S .jar/java Datei ausführen Windows 7 64bit?! Java Basics - Anfänger-Themen 7
E Java Datei erstellen? :) Java Basics - Anfänger-Themen 3
U Java datei ausführen[Fehler] Java Basics - Anfänger-Themen 5
M Datei in java Öffnen Java Basics - Anfänger-Themen 9
P .class Datei direkt starten (optional Java Datei direkt starten) Java Basics - Anfänger-Themen 13
P Java Datei ohne Netbeans ausführen Java Basics - Anfänger-Themen 7
U neue Java-Datei öffnen Java Basics - Anfänger-Themen 10
S JTabbedPane jeder Tab in einer eigenen java Datei? Java Basics - Anfänger-Themen 3
A CMD findet die java.class Datei nicht Java Basics - Anfänger-Themen 46
Maxim6394 Java Datei ausführen Java Basics - Anfänger-Themen 9
D Input/Output Zeilen aus txt-datei in Java-Liste einfügen Java Basics - Anfänger-Themen 9
H java datei ausführen funktioniert nicht Java Basics - Anfänger-Themen 7
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
E PHP Datei mittels Java aufrufen? Java Basics - Anfänger-Themen 3
K Klasse in eingener *.java-Datei Java Basics - Anfänger-Themen 5
A Wie mit Java eine .vbs Datei starten lassen? Java Basics - Anfänger-Themen 4
D Java Applet in einer .jar datei Java Basics - Anfänger-Themen 2
U Java .txt datei öffnen Java Basics - Anfänger-Themen 3
achillesat aus .java in ascii datei Java Basics - Anfänger-Themen 12
H java programm per batch datei öffnen Java Basics - Anfänger-Themen 4
K OOP Macro (.vba-Datei) aus Java Java Basics - Anfänger-Themen 2
C Datei kopieren - Erweiterung java.io.File Java Basics - Anfänger-Themen 2
A Java Datei in Applet umwandeln Java Basics - Anfänger-Themen 4
C *.java Datei nach Doppelklick mit VM ausführen Java Basics - Anfänger-Themen 29
Jats Java-Datei mit unbestimmten Variablen Java Basics - Anfänger-Themen 29
3 Eine HTML Datei in eine Java Datei umschreiben Java Basics - Anfänger-Themen 23
W [Java Archive (JAR) Datei erstellen] Lässt sich nicht ausfürhren Java Basics - Anfänger-Themen 7
M java neue datei erstellen Java Basics - Anfänger-Themen 6
P mit java text-datei auslesen und weiter bearbeiten Java Basics - Anfänger-Themen 3
Developer_X Datei downloaden mit Java (.zip) Java Basics - Anfänger-Themen 19
M lokale exe-Datei über Java-Applet starten Java Basics - Anfänger-Themen 4
L Datei aus Java in anderem Programm öffnen Java Basics - Anfänger-Themen 23
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
X Java txt datei auslesen Java Basics - Anfänger-Themen 10
T Java Webstart soll eine Datei speichern Java Basics - Anfänger-Themen 2
Knizz Java-Datei über cmd öffnen Java Basics - Anfänger-Themen 29
M Datei mit Java für Programm öffnen Java Basics - Anfänger-Themen 10
B Java Datei unter Solaris kompilieren Java Basics - Anfänger-Themen 2
Developer_X Java File listet den Ordner, in dem sich die Datei befindet Java Basics - Anfänger-Themen 7
Developer_X HTML Datei nicht von Java Lesbar Java Basics - Anfänger-Themen 8
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
M Delphi-Record mit Java aus Datei lesen Java Basics - Anfänger-Themen 11
E Habe java. Datei wie ausführen ? Java Basics - Anfänger-Themen 9
2 Mit Java in eine WORD-Datei schreiben Java Basics - Anfänger-Themen 18
M .java als ausführende Datei Java Basics - Anfänger-Themen 2
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
G *.java Datei mit Editor starten und testen Java Basics - Anfänger-Themen 6
K Java Application mit Batch-datei starten Java Basics - Anfänger-Themen 9
O Text von Homepage via Java auslesen und in Text Datei speich Java Basics - Anfänger-Themen 1
G Datei mit Java anlegen Java Basics - Anfänger-Themen 9
J Ein Java-Programm in eine *.exe Datei 'packen' Java Basics - Anfänger-Themen 20
S Datei mit Java-Applikation an Web-Formular schicken Java Basics - Anfänger-Themen 9
G Datei in Java umbenennen Java Basics - Anfänger-Themen 4
K Wieviele Befehle pro .java Datei Java Basics - Anfänger-Themen 4
K aus Java Programme Jar.datei erstellen (eclipse) Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben