2017-08-27 1 views
1

Ich habe eine Druckerdatei, die den gesamten Inhalt einer Datei ausgibt. Ich weiß, fortgeschrittenes Zeug. Jetzt kann ich das Programm erfolgreich ausführen, indem ich das Scanner-Objekt innerhalb meiner Methode das Aufrufen der Datei, die eine Objektvariable in dem Aufruf ist, deklariert.Wenn ein Scanner zum Lesen einer Datei verwendet wird, warum muss der Scanner in der Methode enthalten sein?

Mein Problem ist, dass, wenn ich die Datei und den Scanner innerhalb meines Konstruktors deklariere, es mir nur den Namen der Datei zurückgibt. Ich bin mir nicht sicher, ob ich das gut erklärt habe.

public class Printer { 
private File file; 
private Scanner reader; 


public Printer(String fileName) { 
    this.file = new File(fileName); 
    this.reader = new Scanner(fileName); 
} 

public void printContents() throws FileNotFoundException { 

    while (reader.hasNextLine()) { 
     String line = reader.nextLine(); 
     System.out.println(line); 
    } 

    reader.close(); 
} 

und dann

mein Haupt
public class Main { 

public static void main(String[] args) throws Exception { 
Printer printer = new Printer("src/textfile.txt"); 
printer.printContents(); 
} 

}

Dies druckt gerade aus src/textfile.txt

Antwort

1

Ihr Scanner den Dateinamen wird - und nicht die Datei.

public Printer(String fileName) { 
    this.file = new File(fileName); 
    this.reader = new Scanner(file); //note the change 
} 

Dies sollte Ihnen helfen, zu den Inhalten zu gelangen.

+0

Danke für die Antwort, ist es die bessere Praxis, es innerhalb des Konstruktors zu deklarieren oder innerhalb der Methode zu tun? – ibrahim

+1

Ich würde sagen, Methode - um sicherzustellen, dass Sie die Ressource sehen, die Sie geöffnet haben, und schließen Sie sie, wenn sie nicht verwendet wird. – Assafs

Verwandte Themen