2017-08-27 2 views
1

J'ai un fichier d'imprimante, qui imprime tout le contenu d'un fichier. Je sais, des trucs avancés. Maintenant, je peux exécuter le programme avec succès en déclarant l'objet scanner dans ma méthode, le fichier qui est une variable objet dans l'appel.Lorsque vous utilisez un scanner pour lire un fichier, pourquoi le scanner doit-il être dans la méthode?

Mon problème est que lorsque je déclare le fichier et le scanner dans mon constructeur, il me renvoie juste le nom du fichier. Je ne sais pas si je l'ai bien expliqué.

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(); 
} 

puis ma principale

public class Main { 

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

}

Ce src se contente d'afficher/textfile.txt

Répondre

1

Votre scanner reçoit le nom de fichier - et non le fichier.

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

Cela devrait vous aider à accéder au contenu.

+0

Merci pour la réponse, est-il considéré comme la meilleure pratique de le déclarer dans le constructeur ou de le faire dans la méthode? – ibrahim

+1

Je dirais méthode - pour vous assurer que vous voyez la ressource que vous avez ouverte et fermez-la lorsqu'elle n'est pas utilisée. – Assafs