lire un fichier à l'aide du scanner: Pourquoi suis-je recevoir une erreur lors de l'utilisation du scanner pour les fichiers de lecture en java?

StackOverflow https://stackoverflow.com/questions/766846

  •  12-09-2019
  •  | 
  •  

Question

Cet exemple illustre l'utilisation du scanner pour lire une ligne de fichiers en ligne (il ne fonctionne pas une opération d'écriture) Je ne sais pas pourquoi je reçois une erreur lorsque je tente de compiler. Quelqu'un pourrait-il expliquer la raison de moi ?. J'utilise jcreatorLE et JDK 1.6 pour exécuter mon programme:

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

public final class File_read {

  public static void main(String... aArgs) throws FileNotFoundException {
    ReadWithScanner parser = new ReadWithScanner("C:\\Temp\\test.txt");
    parser.processLineByLine();
    log("Done.");
  }

  /**
  * @param aFileName full name of an existing, readable file.
  */
  public ReadWithScanner(String aFileName){
    fFile = new File(aFileName);  
  }

  /** Template method that calls {@link #processLine(String)}.  */
  public final void processLineByLine() throws FileNotFoundException {
    Scanner scanner = new Scanner(fFile);
    try {
      //first use a Scanner to get each line
      while ( scanner.hasNextLine() ){
        processLine( scanner.nextLine() );
      }
    }
    finally {
      //ensure the underlying stream is always closed
      scanner.close();
    }
  }

  /** 
  * Overridable method for processing lines in different ways.
  *  
  * <P>This simple default implementation expects simple name-value pairs, separated by an 
  * '=' sign. Examples of valid input : 
  * <tt>height = 167cm</tt>
  * <tt>mass =  65kg</tt>
  * <tt>disposition =  "grumpy"</tt>
  * <tt>this is the name = this is the value</tt>
  */
  protected void processLine(String aLine){
    //use a second Scanner to parse the content of each line 
    Scanner scanner = new Scanner(aLine);
    scanner.useDelimiter("=");
    if ( scanner.hasNext() ){
      String name = scanner.next();
      String value = scanner.next();
      log("Name is : " + quote(name.trim()) + ", and Value is : " + quote(value.trim()) );
    }
    else {
      log("Empty or invalid line. Unable to process.");
    }
    //(no need for finally here, since String is source)
    scanner.close();
  }

  // PRIVATE //
  private final File fFile;

  private static void log(Object aObject){
    System.out.println(String.valueOf(aObject));
  }

  private String quote(String aText){
    String QUOTE = "'";
    return QUOTE + aText + QUOTE;
  }
} 

Ceci est le résultat de l'exécuter:

--------------------Configuration: <Default>--------------------
C:\Users\administrador\Documents\File_read.java:15: invalid method declaration; return type required
  public ReadWithScanner(String aFileName){
         ^
1 error

Process completed.
Était-ce utile?

La solution

Lorsque vous avez levé ce code de :-), vous avez renommé la classe, mais pas le constructeur. Seuls les constructeurs sont autorisés à ne pas avoir des types de retour.

Je vous suggère de renommer en arrière la classe ou de renommer le constructeur.

J'espère que ce n'est pas devoirs. En l'état actuel, votre éducateur aurait un temps facile prouver le plagiat. Vous devrez au moins changer les noms de variables, ainsi que les noms de classe, vous voudrez peut-être reformater aussi un peu, y compris en changeant l'ordre des méthodes de la classe.

C'est si c'est des devoirs. Ce qui ce n'est pas, non? : -)

Autres conseils

Votre constructeur "ReadWithScanner" doit correspondre au nom de la classe ( "file_read")

public File_read(String aFileName){
    fFile = new File(aFileName);  
}

Votre classe est nommé File_read et votre constructeur est nommé ReadWithScanner. L'avertissement est que votre constructeur doit être le même nom que la classe.

Le nom de la classe est file_read, donc le nom du constructeur doit être file_read mais vous a donné le nom ReadWithScanner qui est la raison pour laquelle son plaignant. Compilateur sa pensée un nom de méthode si attendre un type de retour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top