Lesen einer Datei Scanner mit: Warum bin ich eine Fehlermeldung erhalten, wenn für Lese-Dateien in Java unter Verwendung von Scanner?

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

  •  12-09-2019
  •  | 
  •  

Frage

Dieses Beispiel zeigt Scanner mit einer Datei Zeile für Zeile lesen (es nicht einen Schreibvorgang nicht durchführt) Ich weiß nicht, warum ich eine Fehlermeldung erhalten, wenn ich versuche zu kompilieren. Könnte jemand den Grund mir erklären ?. Ich bin mit jcreatorLE und JDK 1.6 zu meinem Programm ausführen:

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

Dies ist das Ergebnis von läuft es:

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

Process completed.
War es hilfreich?

Lösung

Wenn Sie diesen Code angehoben von hier :-), Sie umbenannt die Klasse aber nicht den Konstruktor. Nur Konstrukteure dürfen Rückgabetypen nicht haben.

Ich schlage vor, Sie entweder die Klasse umbenennen zurück oder den Konstruktor umbenennen.

Ich hoffe, dass dies nicht Hausaufgaben ist. Wie es aussieht, würde Ihr Erzieher eine einfache Zeit Plagiat erweist sich haben. Sie werden zumindest müssen die Variablennamen Namen sowie Klasse ändern, können Sie es auch die Reihenfolge der Methoden in der Klasse ein wenig neu zu formatieren, einschließlich ändern.

Das ist, wenn es Hausaufgaben sind. Welche ist es nicht, nicht wahr? : -)

Andere Tipps

Ihre "ReadWithScanner" Konstruktor muss den Namen der Klasse ( "file_read")

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

ist Ihre Klasse mit dem Namen File_read und Ihr Konstruktor ReadWithScanner benannt. Die Warnung ist, dass Ihr Konstruktor benötigt die gleiche wie die Klasse genannt werden.

Der Name der Klasse ist file_read, so sollte die Konstruktor Namen file_read sein, aber Sie gab als ReadWithScanner den Namen ein, warum sein Jammern ist. Compiler Denken seiner einen Methodennamen so einen Rückgabetyp erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top