2017-12-06 1 views
0

Ich versuche, mein Programm zu bekommen, um Daten aus einer Textdatei zu lesen und in einem Array zu speichern. Die Textdatei enthält Daten über einen Planeten. Hier ist ein Beispiel:Warum liest mein Scanner nicht aus meiner Datei?

Mercury 
4.151002e10 
2.642029e10 
-1.714167e9 
-3.518882e4 
4.355473e4 
6.785804e3 
3.302e23 

Meine Datei heißt test.txt. Es befindet sich im selben Verzeichnis wie meine class.java-Datei. Ich habe System.out.println(new File("test.txt").getAbsolutePath()); verwendet, um zu überprüfen, ob der Verzeichnispfad korrekt ist, was es war, und ich habe System.out.println(new File(".")); verwendet, um zu überprüfen, ob es in demselben Verzeichnis war, in dem der Code zu kompilieren versuchte, was wiederum war (nur ein Punkt ausgegeben Ich wurde zu der Überzeugung geführt, dass es im richtigen Verzeichnis war). Ich habe verschiedene Möglichkeiten ausprobiert, um die Datei zu finden, z. B. um sie in etwas anderes umzubenennen, um zu überprüfen, dass es kein Schlüsselwort ist, indem ich die Kodierung der Datei in Unicode oder UTF-8 oder ANSI ändere .\test in der Datei in das gleiche Verzeichnis zu suchen, von denen keiner funktionierte.

Hier ist mein Code:

public static void defaultPlanetArray(){ 
    Planet[] solarSystem; 
    solarSystem = new Planet[9]; 
    PhysicsVector dummyAcceleration = new PhysicsVector(); 

    System.out.println(new File("test.txt").getAbsolutePath()); 
    System.out.println(new File(".")); 

    try{ 
    File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt"); 
    Scanner scnr = new Scanner(file); 
    } 
    catch(FileNotFoundException e){ 
    System.out.println("File not found!"); 
    } 
    int i = 0; 

    while(i<9 && scnr.hasNextLine()){ 
    //read values from file and set as Planet object, then set to array. 
    i++ 
    } 

PhysicsVector und Planet sind beide Klassen die ich geschaffen habe. PhysicsVector und der Rest des Planeten abgesehen von diesem Auszug kompilieren ohne Probleme. Wenn ich versuche, dieses spezielle Stück Code zu kompilieren, erhalte ich:

.\Planet.java:65: error: cannot find symbol while(i<9 && scnr.hasNextLine()){ ^

Ich vermute, dies bedeutet, dass der Variable scnr, weil nicht im try Abschnitt erstellt wird es die Datei nicht finden kann. Ich denke, das, weil, wenn ich die try und catch-Blöcke nicht enthalten, erhalte ich:

.\Planet.java:59: error: unreported exception FileNotFoundException; must be caught or declared to be thrown Scanner scnr = new Scanner(file); ^

Ich habe auch versucht die catches FileNotFoundException, wenn ich zuerst die Methode zu schaffen, aber das gibt mir den gleichen Fehler wie unmittelbar oben.

Ich könnte nur die Werte im Programm festlegen, aber das würde viel unnötigen Code geben und ziemlich ineffizient sein, denke ich.

Also meine Frage ist, wie bekomme ich den Scanner meine Werte aus der Datei zu lesen?

+1

Scanner in lokalen Bereich ist es definieren außerhalb try-Block. –

+0

@LalitVerma Wenn ich den Scanner nicht in den try Block setze, erhalte ich einen nicht gemeldeten Ausnahmefehler. War das was du meintest? –

+0

Ich sage für Symbol nicht gefunden scnr, Sie Zugriff darauf außerhalb ihres Geltungsbereichs –

Antwort

0

Wie @Lalit Verma zeigte die scnr Variable, die Sie definiert Leben in der Try - Catch-Block.

Ändern Sie den Code zu:

try{ 
    File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt"); 
    Scanner scnr = new Scanner(file); 
    int i = 0; 

    while(i<9 && scnr.hasNextLine()){ 
     //read values from file and set as Planet object, then set to array. 
     i++ 
    } 
    }catch(FileNotFoundException e){ 
    System.out.println("File not found!"); 
    } 
+0

Perfekt, das hat es behoben! Ich fühle mich ein bisschen dumm, dass es so ein kleiner Fehler war, danke! –

+0

@LalitVerma Ich habe auf Ihren Kommentar, vergessen, Sie zu markieren, behoben es jetzt :) –

Verwandte Themen