2017-10-12 5 views
0

Je crée le programme suivant, qui lit un fichier texte et imprime certaines choses en fonction des arguments qui sont donnés. Si l'utilisateur saisit "Exécuter le profil text.txt", je voudrais qu'il imprime le fichier ligne par ligne. Si l'utilisateur entre "Exécuter Profile text.txt 5", les 5 premières lignes doivent être imprimées. J'ai le programme suivant écrit:Lecture de fichier .txt avec Java?

import java.util.*; 
import java.io.*; 

public class Profile{ 

    public static String file; 
    public static int len; 
    public static Profile a; 
    public static Profile b; 

    //Method to read whole file 
    static void wholeFile(String file){ 
    Scanner in = new Scanner(file); 
    int lineNumber = 1; 

    while(in.hasNextLine()){ 
     String line = in.nextLine(); 
     System.out.println("/* " + lineNumber + " */ " + line); 
     lineNumber++; 
    } 
    in.close(); 
    } 

    //Method to read file with line length 
    static void notWholeFile(String file, int len){ 
    Scanner in = new Scanner(file); 
    int lineNumber = 1; 

    while(in.hasNextLine() && lineNumber <= len){ 
     String line = in.nextLine(); 
     System.out.println("/* " + lineNumber + " */ " + line); 
     lineNumber++; 
    } 
    in.close(); 
    } 

Profile(String file){ 
    this.file = file; 
} 
Profile(String file, int len){ 
    this.file = file; 
    this.len = len; 
    notWholeFile(file, len); 
} 
    public static void main(String[] args){ 
    Scanner in = new Scanner (System.in); 
    if (args.length == 1){ 
     file = args[0] + ""; 
     a = new Profile(file); 
     wholeFile(file); 
    }  
    if (args.length == 2){ 
     file = args[0] + ""; 
     len = Integer.parseInt(args[1]); 
     b = new Profile(file, len); 
     notWholeFile(file, len); 
    } 
    } 
} 

Pour des fins de test, j'ai inclus un fichier txt dans mon répertoire par le nom de « text.txt », qui contient le texte suivant:

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah 

Je suis un débutant avec Java, mais je crois qu'il ne devrait y avoir aucune erreur. Cependant, quand je entrée « run profil text.txt 5 », je reçois la sortie suivante:

> run Profile text.txt 5 
/* 1 */ text.txt 
/* 1 */ text.txt 
> 

Pourquoi ne puis-je pas obtenir les lignes « bla bla » pour imprimer? Y a-t-il une erreur dans la façon dont je lis le fichier .txt? Comment puis-je accéder aux lignes à l'intérieur de ce fichier texte? Tout conseil sera utile.

+3

Il est temps de déboguer. Une suggestion, séparer la classe 'Profile' avec la classe' Main', déplace 'Profile a, b' vers la variable locale –

+0

Je ne comprends pas le but des deux constructeurs' Profile', car ils ne semblent pas être utilisés. – Bazinga

+0

Je suis sûr que votre scanner lit le fichier de chaîne au lieu du fichier réel. Supprimez également notWholeFile du constructeur – Karthikeyan

Répondre

3

Vous numérisez le nom du fichier, pas le contenu du fichier. C'est:

Scanner in = new Scanner(file); // where file is of type string 

crée un Scanner qui lit le String lui-même. Essayez quelque chose comme:

Scanner in = new Scanner(new File(file)); 

Ceci devrait lire le contenu du fichier.