leer un archivo mediante escáner: ¿Por qué recibo un error cuando se utiliza para archivos de lectura del escáner en Java?

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

  •  12-09-2019
  •  | 
  •  

Pregunta

Este ejemplo muestra el uso del escáner para leer un archivo línea por línea (que no lleva a cabo una operación de escritura) No sé por qué me da un error cuando intento compilar. Podría alguien explicar la razón para mi ?. Estoy usando jcreatorLE y JDK 1.6 para ejecutar mi programa:

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

Este es el resultado de ejecutarlo:

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

Process completed.
¿Fue útil?

Solución

Cuando usted levantó ese código de aquí :-), cambió el nombre de la clase, pero no el constructor. Solamente los constructores se les permite no tener tipos de retorno.

Le sugiero que cambie el nombre de la clase, ya sea atrás o cambiar el nombre del constructor.

Espero que esto no es tarea. Tal como está, su educador tendría un momento fácil demostrar el plagio. Tendrá que al menos cambiar los nombres de las variables, así como los nombres de clases, es posible que desee cambiar el formato también un poco como cambiar el orden de los métodos de la clase.

Eso es si se trata de la tarea. Lo cual no lo es, ¿verdad? : -)

Otros consejos

Su constructor "ReadWithScanner" debe coincidir con el nombre de la clase ( "file_read")

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

Su clase se llama File_read y el constructor se llama ReadWithScanner. La advertencia es que el constructor tiene que ser el mismo nombre que la clase.

El nombre de la clase es file_read, por lo que el nombre del constructor debe ser file_read pero se dio el nombre como ReadWithScanner es por eso que su queja. Compilador pensando que es un nombre de método por lo que espera un tipo de retorno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top