eigene kleine Datenverwaltung

poku17

Mitglied
Hey ho,
Ich habe mir eine kleine Klasse zur Datenverwaltung waehrend der Laufzeit eines Programmes geschrieben, wo ich z.B. mir fuer eine Schulaufgabe die Statistik einer Pension und ihrer Gaeste in eine Datei geschrieben hatte... Hat auch alles wunderbar funktioniert, auch wenn es noch nicht fertig ist... sind noch unnuetze Dinge drin die ich noch weiter entwickeln wollte, aber erstmal moechte ich nun wissen wie man das grundsetzlich am besten realisiert... schreibt man sowas ueberhaupt oder nimmt man lieber im programm die Java Foundation Classes. ???
habe leider nicht viel im forum oder google gefunden...

Hier meine DatenverwaltungsKlasse:
Java:
import java.io.*;
import java.nio.*;
import java.nio.file.*;
import java.util.*;

public class FileManager_v08{
  private BufferedReader br;
  private BufferedWriter bw;
  private List<Path> pathList;
  private List<File> fileList;
  private List<String> txtStrList;
  private List<char[]> txtCharList;
  private int fileCount = 0;
  
  FileManager_v08(){
    String txt = "";
    fileList = new LinkedList();
    pathList = new LinkedList();
    txtStrList = new LinkedList();
    txtCharList = new LinkedList();
  }
  FileManager_v08(String filename){
    String txt = "";
    fileList = new LinkedList();
    pathList = new LinkedList();
    txtStrList = new LinkedList();
    txtCharList = new LinkedList();
    addFile(filename);
  }
  FileManager_v08(String[] filenames){
    String txt = "";
    fileList = new LinkedList();
    pathList = new LinkedList();
    txtStrList = new LinkedList();
    txtCharList = new LinkedList();
      for(int i = 0; i < filenames.length; i++){
        addFile(filenames[i]);
      }
  }
  public String read(String filename){
    if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          return txtStrList.get(i);
        }
        else if(i == fileList.size() - 1){
          System.out.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
    }
    else{
      System.out.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
    return null;
  }
  
  public void writeln(String filename, String output){
    String text = "";
    char[] input;
     if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          try {
            bw = new BufferedWriter(new FileWriter(fileList.get(i)));
            bw.write(txtStrList.get(i));
            bw.newLine();
            bw.write("\n" + output);
            bw.close();
            input = new char[(int)fileList.get(i).length()];
            br = new BufferedReader(new FileReader(fileList.get(i)));
            br.read(input);
            br.close();
            text = new String(input);
            txtStrList.remove(i);
            txtStrList.add(i, text);
            txtCharList.remove(i);
            txtCharList.add(i, input);
          } catch (IOException ex) {
          }
          break;
        }
        else if(i == fileList.size() - 1){
          System.out.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
    }
    else{
      System.out.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  public int size(){
    return fileCount;
  }
  public void addFile(String filename){
    char[] input;
    try {
      fileList.add(new File(filename));
      if(!fileList.get(fileList.size()-1).exists()){
        fileList.get(fileList.size()-1).createNewFile();
      }
      br = new BufferedReader(new FileReader(fileList.get(fileList.size()-1)));
      pathList.add(fileList.get(fileList.size()-1).toPath());
      input = new char[(int)fileList.get(fileList.size()-1).length()];
      br.read(input);
      br.close();
      txtCharList.add(input);
      txtStrList.add(new String(input));
      fileCount++;
    } catch (FileNotFoundException ex) {
      System.out.println(" Datei nicht gefunden : " + filename);
    } catch (IOException e){
      System.out.println(" Datei konnte nicht erstellt werden ! ");
    }
  }
  public void clearFile(String filename){
    String text = "";
    char[] input;
    if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          try {
            bw = new BufferedWriter(new FileWriter(fileList.get(i)));
            bw.write(text);
            bw.close();
            input = new char[(int)fileList.get(i).length()];
            br = new BufferedReader(new FileReader(fileList.get(i)));
            br.read(input);
            br.close();
            txtStrList.remove(i);
            txtStrList.add(i, new String(input));
            txtCharList.remove(i);
            txtCharList.add(i, input);
          } catch (IOException ex) {
          }
          break;
        }
        else if(i == fileList.size() - 1){
          System.out.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
    }
    else{
      System.out.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  public void deleteFile(String filename){
    String text = "";
    char[] input;
    if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          try {
            bw = new BufferedWriter(new FileWriter(fileList.get(i)));
            bw.write(text);
            bw.close();
            input = new char[(int)fileList.get(i).length()];
            br = new BufferedReader(new FileReader(fileList.get(i)));
            br.read(input);
            br.close();
            fileList.get(i).delete();
            fileList.remove(i);
            pathList.remove(i);
            txtStrList.remove(i);
            txtCharList.remove(i);
            fileCount--;
          } catch (IOException ex) {
          }
          break;
        }
        else if(i == fileList.size() - 1){
          System.out.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
    }
    else{
      System.out.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
}

Hoffe ihr habt konstruktive Kritik fuer mich, denn ich weis, ich muss noch einiges lernen ;)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
für fast alles gibt es große professionelle Lösungen, aber wenn man nichts selber macht, lernt man ja nie etwas,

zum Code zwei Tipps, direkt bzw ableitbar aus der größen Programmierregel überhaupt in meinen Augen:
nichts doppelt schreiben

bei den Konstruktoren hast du 3x
> fileList = new LinkedList();
> pathList = new LinkedList();
> txtStrList = new LinkedList();
> txtCharList = new LinkedList();
da könntest du auf andere Konstruktoren oder notfalls eine init-Methode verweisen

nicht ganz so offensichtlich ist es mit den ganzen Dateioperationen, aber diese Methoden sind unnötig komplex zusammengewurschtelt,
was du im Detail mit den ganzen Listen, char[] und Strings machst sehe ich in den ersten 30 sec Code-Anschauen nicht,

aber mehrmals Blöcke a la
> br = new BufferedReader(new FileReader(fileList.get(i)));
> br.read(input);
> br.close();
ist einfach unnötig,
schreibe dir eine Methode, [c]public String read(String filename][/c]
und der Rest des Programms ist quasi frei von BufferedReader, und close() kann nicht vergessen werden,
dort kannst du dann Exceptions auch ausgeben, sparst dir das unleserliche try/catch in den wichtigeren Methoden,
und besonders leerer catch-Blöcke sind unnötige selbstgebaute Fehler-Verschleierungen

inhaltlich ist nicht viel zu bewerten, ich sehe kaum mehr als Listen, Lesen + Schreiben,
das macht auch bestimmt das wofür man es hält, Lesen + Schreiben von Daten,
dazu ist in so kurzem Programm nichts zu sagen
 

poku17

Mitglied
Okay, das hilft mir doch schon mal weiter :D, muss dir auch in allen Punkten recht geben... werde das ma nachher/morgen noch ma umschreiben... THX
 

poku17

Mitglied
So mal etwas umgeschrieben das ganze.. habe es nicht wieder getestet... :
Java:
import java.io.*;
import java.nio.file.*;
import java.util.*;

public class FileManager{
  //MEMBER VARIABLEN
  private BufferedReader br;
  private BufferedWriter bw;
  private List<Path> pathList;
  private List<File> fileList;
  private List<char[]> txtCharList;
  private int fileCount = 0;
  
  private void initArrays(){
    fileList = new LinkedList();
    pathList = new LinkedList();
    txtCharList = new LinkedList();
  }
  
  //KONSTRUKTOREN
  FileManager(){
    String txt = "";
    initArrays();
  }
  FileManager(String filename){
    String txt = "";
    initArrays();
    addFile(filename);
  }
  FileManager(String[] filenames){
    String txt = "";
    initArrays();
    for(String s : filenames){
      addFile(s);
    }
  }
  
  //READ
  private void read(String filename){
    char[] input;
    for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          input = new char[(int)fileList.get(i).length()];
          try {
            br = new BufferedReader(new FileReader(fileList.get(i)));
            br.read(input);
            br.close();
            txtCharList.remove(i);
            txtCharList.add(i, input);
          } 
          catch (FileNotFoundException ex) {
            System.err.println(" DATEI NICHT GEFUNDEN : " + ex);
          }
          catch (IOException ex) {
            System.err.println(" IO FEHLER : " + ex);
          }
        }
      } 
  }
  //WRITE
  private void write(String filename, String output, int row1, int row2){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          try {
            bw = new BufferedWriter(new FileWriter(getFile(filename)));
            bw.write(txtCharList.get(i));
            bw.write("\n" + output, row1, row2);
            bw.close();
            read(filename);
          } catch (IOException ex) {
          }
          break;
        }
        else if(i == fileList.size() - 1){
          System.err.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
  }
  
  //Dateiinhalt als String zurueckgeben
  public String getText(String filename){
    if(fileCount > 0){
      return new String(getTextAsChars(filename));
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
    return null;
  }
  //Dateiinhalt als char Array zurueckgeben
  public char[] getTextAsChars(String filename){
    if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        if(fileList.get(i).getName().equals(filename)){
          return txtCharList.get(i);
        }
        else if(i == fileList.size() - 1){
          System.err.println(" DATEI NICHT GEFUNDEN : " + filename);
        }
      } 
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
    return null;
  } 
  //Textinhalt in Datei schreiben
  public void setText(String filename, String output){
    if(fileCount > 0){
      write(filename, output, 0, (int)getFile(filename).length());
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  //Textinhalt von x bis x in Datei beschreiben
  public void setTextTo(String filename, String output, int zeile1, int zeile2){
    if(fileCount > 0){
     write(filename, output, zeile1, zeile2);
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  //Datei hinzufuegen
  public void addFile(String filename){
    try {
      fileList.add(new File(filename));
      if(!fileList.get(fileList.size()-1).exists()){
        fileList.get(fileList.size()-1).createNewFile();
      }
      pathList.add(fileList.get(fileList.size()-1).toPath());
      txtCharList.add(getTextAsChars(filename));
      fileCount++;
    }
    catch (IOException e){
      System.err.println(" Datei konnte nicht erstellt werden ! " + e);
    }
  }
  //Datei leeren, also mit einem leer-String beschreiben
  public void clearFile(String filename){
    if(fileCount > 0){
      setText(filename, "");
      read(filename);
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  //Datei vom System und FileManager löschen
  public void deleteFile(String filename){
    if(fileCount > 0){
      for(int i = 0; i < fileList.size(); i++){
        fileList.get(i).delete();
        fileList.remove(i);
        pathList.remove(i);
        txtCharList.remove(i);
        fileCount--;
        break;
      } 
    }
    else{
      System.err.println(" BITTE ERST EINE DATEI HINZUFUEGEN !");
    }
  }
  //Anzahl der im FileManager enthaltenen Datein
  public int size(){
    return fileCount;
  }
  //Groeße einer Datei
  public int fileSize(String filename){
    return (int)getFile(filename).length();
  }
  //Datei beim namen suchen und zurueckgeben
  public File getFile(String filename){
    for(File f : fileList){
      if(filename.equals(f.getName())){
        return f;
      }
    }
    return null;
  }
}

habe ich einen Kritikpunkt vergessen ? oder hat noch jmd andere verbesserungs Vorschlaege ?
Mich selbst stoeren gerade auch noch paar sachen...

z.b. Ich habe nun eine Methode die mir die File nach namen raus sucht, aber wenn ich in na andern Methode auf ne andere Liste zugreifen will (sagen wir auf die txtCharList), dann brauch ich wieder ne for schleife um daran zu kommen, weil ich ja nicht weis, das wie vielte Listen Element mein gesuchtes ist... daher glaube ich, sollte ich jeder file ein index zuweisen, mit getFile(String filename) mir den Index zurueck geben lassen und damit den richtigen Inhalt aus der anderen Liste holen... Wie mache ich das nun am besten, einfach ne hashmap mit <Integer, File> / <Integer, String> ??? oder wie wuerdet ihr es schoener loesen ?? (kann sein das noch mehr Listen kommen, vor der weiteren implementierung, lieber noch ein paar Tips von euch holen ;) )
 
S

SlaterB

Gast
mit deinem vorherigen Code ist das nicht so leicht zu vergleichen, weil etwa Methode writeln(..) nicht mehr wiederzufinden ist

den neuen Absatz habe ich nicht ganz verstanden, z.B. warum die Suche nach einem File auf einmal von anderen Codestellen und dort txtCharList abhängt,
allgemein ist eine Map aber ne günstige Sache, wenn man überlegt eine Einsatzmöglichkeit gefunden hat, ja

wobei gegenüber Listen eher nur bei tausenden Einträgen spürbar schneller, soviele Dateien hat man vielleicht gar nicht zu verwalten
 

poku17

Mitglied
ja, verstaendlich^^ Habe es eben mit der hashmap ausprobiert, und durch diese verschwinden die ganzen for schleifen die mich so genervt hatten...
Ja habe das mit den Methoden geaendert, damit es nicht zur verwirrung kommt, nur die beiden privaten methoden sind mit write/read benannt, die oeffentlichen mit set-/getText...().

Also, ging mir dabei nicht um die performance, sondern um die, fuer mich, bessere Lesbarkeit des Quellcodes... ohne hashmap braeuchte ich in jeder methode eine for schleife oder fuer jede Liste ne eigene Methode die mir mein gewuenschtes Objekt zurueckgibt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene kleine Sprache entwickeln Java Basics - Anfänger-Themen 6
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben