Threads Verschiedene .txt Dateien Auf Listen und Verbinden

Buroto

Mitglied
Hallo zusammen ich habe dieses Aufgabe beim Azubi betrieb gehabt und ich möchte gerne eure meinung haben um die beste Antwort zu schreiben
also Aufgabe steht auf den Folgendes:-


Aufgabe:

Ich habe drei Dateien hochgeladen, die ihr bitte in Java auslest und anschließend so miteinander verbindet, dass jede Person aus der Datei "Namen.txt" die korrekte Berufsbezeichnung aus "Berufe.txt" und Adresse aus "Adressen.txt" zugewiesen bekommt. Diese gebt ihr bitte auf der Kommandozeile entsprechend aus.

Annahme: Zu jedem Datensatz in jeder Datei existiert in den anderen Dateien ein zugehöriger Datensatz
Erweiterung der Aufgabe:
Entgegen der Annahme aus der Aufgabe, dürfen auch Datensätze z.B. ohne Namen oder ohne Adresse oder ohne Beruf existieren. Erweitere dein Programm dahingehend, dass es diese "Probleme" abfängt.
Anpassung der Aufgabe nach dem ersten Review der Ergebnisse:
Userstory
Als Benutzer wünsche ich mir, dass ich aus den gegebenen Dateien "Namen.txt", "Berufe.txt" und "Adressen.txt" eine Liste aller Namen mit - über die ID zugewiesenen Berufen und Adressen - in einem Excel-kompatiblen Format auf der Kommandozeile ausgegeben bekomme.
Akzeptanzkritieren
AT01: Kann der Benutzer die Pfade und Namen der Dateien angeben?
AT02: Kann der Benutzer die Daten aus der Kommandzeile nach Excel übertragen?
AT03: Berücksichtigt Excel die Felder?
AT04: Enthält die Ausgabe auf der Kommandozeile die Kopfdaten?
Die Akzeptanzkriterien dienen zum Abgleich der Anforderung gegen Bedingungen. Die Aktzeptanzkriterien müssen immer so gefragt werden, dass sie mit "Ja" beantwortet werden können.

  • ich habe Erstens einen Person Classe erstellt

Code:
public class Personal {
    //Creating Adress inner Class
    public class Adr {
        int Id , Plz;
        String Ort , Strasse;

        public Adr (int id, String str , int plz , String city){
            this.Id=id;
            this.Strasse=str;
            this.Plz=plz;
            this.Ort=city;

        }
    }
    int ID;
    String Name , VorName , Beruf;
    Adr adresse ;
    // Create Constructor + functions ( Person , Job , Address )

    // Assigning via ID
    public Personal (int id ){
        this.ID = id;
    }

    //Assigning via (ID,Name,Vorname) (( File Name ))// Overloading
    public Personal (int id , String name , String vorname){
        this.ID = id;
        this.Name = name;
        this.VorName = vorname;
    }

    public int getID(){
        return ID;
    }

    public void setBeruf(String beruf) {
        this.Beruf = beruf;
    }

    public void setAdresse(Adr adresse){
        this.adresse = adresse;
    }

//    public String Person(){
//        return Name+","+VorName+","+Beruf+","+adresse;
//    }
}

  • Auflisten und verbienden
Code:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.*;

/*
Roadmap
    formatting the code in a clear "input - computing - output" fashion for clarity
        implementing try-catch instead of throwing exceptions
            learning about try - catch and exceptions
        changing methods to receive the scanned file instead of the people list
    adding a way to give a specific path and name for the files
    saving the header for further outputs
    asking ulf about specifications regarding an output to excel and implementing that
 */
public class MainClass {
    static String[] namenHeader;
    static String[] berufeHeader;
    static String[] adressenHeader;

    public static void  main (String[] args){



        ArrayList<Person> personenliste = getPeople(scannerFromString(args[0])); //Creates list of people based on the list of names

        addBerufe(personenliste, scannerFromString(args[1])); //adds jobs to the people with the corresponding ID.
        // If ID doesn't correspond to a person, a person will be created and the job will be assigned


        addAdresse(personenliste, scannerFromString(args[2]));//see addBerufe method.

        //Liste der Personen wird nach ID sortiert und Ausgabe wird erzeugt

        personenliste.sort(Comparator.comparing(Person::getId));

        //allows User to export files in a csv file

            createCSV(personenliste,args[3]);
            Scanner print = scannerFromString(args[3]);
            while(print.hasNextLine()) System.out.println(print.nextLine());



    }

    private static void addAdresse(ArrayList<Person> personenliste, Scanner addressScanner){
    /*Adressen werden ausgelesen, anhand der ID der entsprechenden
    Person zugeordnet und hinzugefügt. Falls noch nicht vorhanden
    wird eine neue Person angelegt.*/
        adressenHeader = addressScanner.nextLine().split(";");
        while (addressScanner.hasNextLine()) {
            String[] adressenStringSplit = addressScanner.nextLine().split(";");
            Address address = new Address(
                    Integer.parseInt(adressenStringSplit[0]),
                    adressenStringSplit[1],
                    Integer.parseInt(adressenStringSplit[2]),
                    adressenStringSplit[3]);
            int i = 0;
            while(personenliste.get(i).getId() != Integer.parseInt(adressenStringSplit[0])){
                i++;
                if( i >= personenliste.size()){
                    personenliste.add(new Person(
                            Integer.parseInt(adressenStringSplit[0])));
                    break;
                }
            }
            personenliste.get(i).setAdresse(address);
        }
    }

    private static void addBerufe(ArrayList<Person> personenliste, Scanner berufeScanner){
    /*Berufe werden ausgelesen, anhand der ID der entsprechenden
    Person zugeordnet und hinzugefügt. Falls noch nicht vorhanden
    wird eine neue Person angelegt.*/
        berufeHeader = berufeScanner.nextLine().split(";");
        while(berufeScanner.hasNextLine()){
            String[] berufeStringSplit = berufeScanner.nextLine().split(";");
            int i = 0;
            while(personenliste.get(i).getId() != Integer.parseInt(berufeStringSplit[0])){
                i++;
                if( i >= personenliste.size()){
                    personenliste.add(new Person(
                            Integer.parseInt(berufeStringSplit[0])));
                    break;
                }
            }
            personenliste.get(i).setBeruf(berufeStringSplit[1]);
        }
    }

    private static ArrayList<Person> getPeople(Scanner namenScanner){
        //Personen werden mit Namen und ID erzeugt
        namenHeader = namenScanner.nextLine().split(";");
        ArrayList<Person> personenliste = new ArrayList<>();
        while (namenScanner.hasNextLine()){
            String[] namenStringSplit = namenScanner.nextLine().split(";");
            personenliste.add(new Person(
                    Integer.parseInt(namenStringSplit[0]),
                    namenStringSplit[2],
                    namenStringSplit[1]));
        }
        return personenliste;
    }

    private static void createCSV(ArrayList<Person> personenliste, String path){
        try {
            File outputFile = new File(path);
            outputFile.createNewFile();
            FileWriter writer = new FileWriter(outputFile);

            writer.write(namenHeader[0] + "," + namenHeader[1] + "," + namenHeader[2] + "," +
                    berufeHeader[1] + "," + adressenHeader[1] + "," + adressenHeader[2] + "," +
                    adressenHeader[3] + "\n");
            for (Person person: personenliste){
                writer.write(person.id + ",");
                if (person.name != null) writer.write(person.vorname + "," + person.name + ",");
                    else writer.write(",,");
                if (person.beruf != null) writer.write(person.beruf + ",");
                    else writer.write(",");
                if (person.adresse != null) writer.write(person.adresse.strasse + ","
                        + person.adresse.plz + "," + person.adresse.ort);
                    else writer.write(",,,");
                writer.write("\n");
                writer.flush();
            }

            writer.close();

        }catch(IOException e){
            System.out.println("Can't create new file.");
        }

    }

    private static Scanner scannerFromString(String path) {
        try {
            File file = new File(path);
            return new Scanner(file);
        } catch (FileNotFoundException e) {
            System.out.println("File not found.");
            return null;

        }
    } //Gets the Scanner from the path
}
 

KonradN

Super-Moderator
Mitarbeiter
Also was mir direkt auffällt: Die Klasse Adr ist eine innere Klasse, welche nicht static ist. Dadurch hat jede Adr Instanz eine äußere Instanz von Person. Durch den Setter kann man nun aber eine Adr zuweisen, die eigentlich außen eine andere Person hat.

Dann ist Adr nach außen sichtbar, daher wäre es auch sinnvoll, das nicht als innere Klasse zu machen.

Bei Bezeichnern nicht abkürzen. Also statt Adr dann Address nehmen.

Aber da scheinst Du auch schon etwas mehr zu haben, denn in dem Code nutzt Du dann ja eine Address Klasse. Da passt es also nicht so ganz zusammen, was Du da an Code zeigst - oder täusche ich mich da jetzt?

Person hat getter / setter - die Instanzvariablen sollten private und nicht package private sein - und damit nicht mehr für andere Klassen zugreifbar! Der Zugriff sollte somit nur über Getter / Setter erfolgen.

Die Scanner auf den Dateien schließt Du nie. Das sollte man so machen, dass man da ein try with resources nutzt.

Die Struktur ist noch sehr schwer verständlich. Da wäre eine bessere Strukturierung in mehrere Methoden evtl. hilfreich.
 

Buroto

Mitglied
Also was mir direkt auffällt: Die Klasse Adr ist eine innere Klasse, welche nicht static ist. Dadurch hat jede Adr Instanz eine äußere Instanz von Person. Durch den Setter kann man nun aber eine Adr zuweisen, die eigentlich außen eine andere Person hat.

Dann ist Adr nach außen sichtbar, daher wäre es auch sinnvoll, das nicht als innere Klasse zu machen.

Bei Bezeichnern nicht abkürzen. Also statt Adr dann Address nehmen.

Aber da scheinst Du auch schon etwas mehr zu haben, denn in dem Code nutzt Du dann ja eine Address Klasse. Da passt es also nicht so ganz zusammen, was Du da an Code zeigst - oder täusche ich mich da jetzt?

Person hat getter / setter - die Instanzvariablen sollten private und nicht package private sein - und damit nicht mehr für andere Klassen zugreifbar! Der Zugriff sollte somit nur über Getter / Setter erfolgen.

Die Scanner auf den Dateien schließt Du nie. Das sollte man so machen, dass man da ein try with resources nutzt.

Die Struktur ist noch sehr schwer verständlich. Da wäre eine bessere Strukturierung in mehrere Methoden evtl. hilfreich.
ich wurde die Inner Class (Adressen) löchen und die InsantzDaten in die Personal Klasse direkt impliementieren deine Meinung ??
 

Oneixee5

Top Contributor
Ähnliche Java Themen
  Titel Forum Antworten Datum
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben