Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException)

mgeiss

Mitglied
Hallo,

ich steige gerade in Java ein, und möchte eine Textdatei per Scanner-Funktion zeilenweise einlesen und auf der Konsole ausgeben. Der Quellcode sieht folgendermaßen aus:

Java:
import java.io.*;
import java.util.*;

public class Test {

public static void main ( String[] args) {
   File f = new File("test.txt");
   Scanner input = new Scanner(f);
   while (input.hasNextLine()) {
     String line = input.nextLine();
     System.out.println(line);
    }
}

}

Das ganze bricht bei der Scanner Initialisierung mit einer FileNotFoundException ab.
Java-Datei und Textdatei befinden sich im gleichen Verzeichnis, und ich rufe javac aus diesem Ordner heraus auf. Es dürfte daher eigentlich kein Pfad-Problem sein.

Ich habe trotzdem statt "test.txt" auch mal den vollständigen Pfad eingetragen, so wie ihn
Java:
f.getAbsolutePath()
ausgibt, aber das hilft leider auch nichts. Auch ein "./test.txt" funktioniert nicht.

Wo liegt mein Fehler?

Danke und Gruß,
Matthias
 
Java rufe ich in dem Fall (noch) garnicht auf, weil der Compiler nicht durchläuft. Oder meinst Du etwas anderes? Ansonsten würde ich es auch aus dem Ordner heraus aufrufen.

Der Dateiname passt, das ganze mache ich unter Mac OS X 10.11.6 mit Java 8.
 
Dann wäre die genaue Fehlermeldung interessant - dein Code wird beim kompilieren nicht ausgeführt, also wird auch nicht versucht, die Datei zu öffnen.
 
Hier die Ausgabe am Terminal:

Code:
MGMBP:Test Matthias$ ls
Test.java   test.txt

MGMBP:Test Matthias$ javac Test.java
Test.java:8: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
    Scanner input = new Scanner(f);
                    ^
1 error
 
Ah.
Der Scanner *kann* an der Stelle eine FileNotFoundException werfen.
Das das eine Checked Exception ist, musst du diese zwingend behandeln - entweder mit try-catch oder indem die Methode mit throws angibt, dass diese geworfen werden kann.
 
Ah, danke.
Also mit try-catch läuft der compiler durch, den Code habe ich folgendermaßen geändert:
Java:
public static void main ( String[] args) {
  try {
    File f = new File("test.txt");
    Scanner input = new Scanner(f);
    while (input.hasNextLine()) {
      String line = input.nextLine();
      System.out.println(line);
      }
    }
   catch (FileNotFoundException e) {
     e.printStackTrace();
   }
}

Jetzt läuft javac zwar durch, aber java bricht mit folgender Fehlermeldung ab:

Code:
MGMBP:Test Matthias$ java Test
java.io.FileNotFoundException: Users/Matthias/Documents/Java/Projekte/Test/test.txt (No such file or directory)
   at java.io.FileInputStream.open0(Native Method)
   at java.io.FileInputStream.open(FileInputStream.java:195)
   at java.io.FileInputStream.<init>(FileInputStream.java:138)
   at java.util.Scanner.<init>(Scanner.java:611)
   at Test.main(Test.java:9)

Das "No such file or directory" ist das Komische, da die Datei an dieser Stelle auf jeden Fall vorhanden ist, keine weiteren versteckten Endungen hat, nicht lese- oder schreibgeschützt ist etc.

Code:
MGMBP:Test Matthias$ pwd
/Users/Matthias/Documents/Java/Projekte/Test
MGMBP:Test Matthias$ ls -l
total 24
-rwxrw-rw-  1 Matthias  staff  803  1 Jun 05:06 Test.class
-rwxrw-rw-  1 Matthias  staff  432  1 Jun 04:56 Test.java
-rwxrw-rw-  1 Matthias  staff   13 31 Mai 10:24 test.txt
MGMBP:Test Matthias$
 
Zuletzt bearbeitet:

Zurück
Oben