Zum Inhalt springen

Aus Datei auslesen -> Exception


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo!

Wieso kriege ich gleich "test" ausgegeben?

import java.util.NoSuchElementException;

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;



public class Main {


    public static void main(String[] args) throws FileNotFoundException {

        leseDatei();

    }


    private static void leseDatei() throws NoSuchElementException, FileNotFoundException {

        Scanner scan = new Scanner(new File("personen.src"));

        String[][] zeilearray = new String[2048][4];


        try {

            while (scan.nextLine() != null) {            

                while (scan.nextLine() != null) {

                    String zeile = scan.nextLine();

                    String temp[] = zeile.split("\\;");


                    for (int i = 0; scan.nextLine() != null; i++) {

                        for (int j = 0; j < 4; j++) {

                            zeilearray[i][j] = temp[j];

                        }

                    }

                }                

                    for (int i = 0; i < 2048; i++){

                        for (int j = 0; j < 4; j++){

                            System.out.println(zeilearray[i][j]);

                        }

                    }


            }

        } catch (Exception a) {

            System.out.println("test"); 

        }

    }

}
Auszug aus meiner "personen.src"
1;Person1;1.1.1950;Ort1

2;Person2;2.1.1950;Ort2

3;Person3;3.1.1950;Ort3

4;Person4;4.1.1950;Ort4

5;Person5;5.1.1950;Ort5

6;Person6;6.1.1950;Ort6

7;Person7;7.1.1950;Ort7

8;Person8;8.1.1950;Ort8

9;Person9;9.1.1950;Ort9

10;Person10;10.1.1950;Ort10

11;Person11;11.1.1950;Ort11

12;Person12;12.1.1950;Ort12

13;Person13;13.1.1950;Ort13

14;Person14;14.1.1950;Ort14

15;Person15;15.1.1950;Ort15

16;Person16;16.1.1950;Ort16


usw. bis 2048

Bearbeitet von Max4000
Geschrieben

catch (Exception a) {

            System.out.println("test"); 

        }

Wieso kriege ich gleich "test" ausgegeben?

üblicherweise gibt man an dieser stelle die Message von a aus, weil da naturgemäss eine oder mehrere fehlerursachen drinstehen ;)

es wäre ja auch sinnlos, eine fehlerbehandlung einzubauen, um sie dann garnicht zu verwenden.

s'Amstel

Geschrieben

und in welcher zeile wird die Exception effektiv geworfen?

ich verstehe ausserdem nicht, warum du zeilen in ineinander geschachtelten schleifen einliest und nicht in einer einzelnen.

while (scan.nextLine() != null) {            

                while (scan.nextLine() != null) {

                    String zeile = scan.nextLine();

damit dürftest du meinem verständnis nach ja schon mal zumindest 2 zeilen ignorieren; die erste sowieso und dann jede zweite. somit sollte es logisch erscheinen, dass du irgendwann über das dateiende hinausliest, was in einer Exception gipfelt.

s'Amstel

Geschrieben

ich frage mich so langsam auch, was ich da fabriziert habe.

so sieht es jetzt aus:

try {

            while (scan.next() != null) {            

                    String zeile = scan.next();

                    String temp[] = zeile.split("\\;");


                    for (int i = 0; scan.next() != null; i++) {

                        for (int j = 0; j < 4; j++) {

                            zeilearray[i][j] = temp[j];

                        }

                    }

            }

            for (int i = 0; i < 2048; i++){

                for (int j = 0; j < 4; j++){

                    System.out.println(zeilearray[i][j]);

                }

            }

        } catch (Exception a) {

            System.out.println(a); 

        }
Ich kriege dafür auch eine neue Exception:
java.util.NoSuchElementException
Will man mir damit sagen, dass er die Datei nicht findet? Denn ein nomales "println" gibt was aus. Vielleicht hab ich ja einen generellen Überlegungsfehler drin? Ich will die Datei auslesen und ein mehrdimensionales Array erzeugen.
array[zeile][nr,name,alter,ort]

Geschrieben

Hm, ok...

Und was sagt mir das jetzt?

java.util.NoSuchElementException

    at java.util.Scanner.throwFor(Unknown Source)

    at java.util.Scanner.next(Unknown Source)

    at Main.leseDatei(Main.java:39)

    at Main.main(Main.java:16)

Geschrieben


  while (scan.next() != null) {            

  String zeile = scan.next();

  [...]

Es gibt keine weitere Zeile. Der Check in deiner While-Schleife stellt stellt nur sicher, dass noch eine Zeile vorhanden ist wenn du die Schleife betrittst. Der nächste scan.next Aufruf hingegen kann durchaus fehlschlagen, wenn keine Zeile mehr vorhanden ist.

Wenn du zunächst einmal ins Javadoc von Scanner geguckt hättest wäre dir das auch aufgefallen:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html#next%28%29" data-cite="\"

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html#next%28%29

">

NoSuchElementException - if no more tokens are available
Geschrieben

Die Frage ist eher, warum zwei ineinander geschachtelte While-Schleifen, die das geleiche machen. Er geht für den ersten Datensatz in die While-Schleife und liest dann ab dem zweiten die Datei vollständig. Wenn er hinter dem letzten Datensatz steht, geht er wieder in die äußere Schleife und wirft dann zu recht eine "No Element Exception"

Phil

Geschrieben

Na klar:

import java.util.NoSuchElementException;

import java.io.File;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.Scanner;



public class Main {


    public static void main(String[] args) throws FileNotFoundException {

        try {

        leseDatei();

        } catch (Exception e){


        }

    }


    private static void leseDatei() throws NoSuchElementException, FileNotFoundException {

        Scanner scan = new Scanner(new File("personen.src"));

        String[][] zeilearray = new String[2048][4];


        try {

                for (int i = 0; scan.hasNextLine(); i++) {

                    String zeile = scan.nextLine();

                    String temp[] = zeile.split("\\;");            

                        for (int j = 0; j < 4; j++) {

                            zeilearray[i][j] = temp[j];

                        }


                    }


            for (int i = 0; i < 2048; i++){

                for (int j = 0; j < 4; j++){

                    System.out.println(zeilearray[i][j]);

                }

            }

        } catch (Exception a) {

            a.printStackTrace();

        }

    }

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...