2009-04-20 2 views
1

Dieses Beispiel demonstriert die Verwendung von Scanner zum Lesen einer Datei Zeile für Zeile (es führt keine Schreiboperation aus) Ich weiß nicht, warum ich einen Fehler erhalte, wenn ich versuche zu kompilieren. Könnte mir jemand den Grund erklären? Ich verwende jcreatorLE und JDK 1.6 zu meinem Programm ausführen:lesen Sie eine Datei mit Scanner: Warum bekomme ich einen Fehler bei der Verwendung von Scanner für das Lesen von Dateien in Java?

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 davon läuft:

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

Process completed. 
+0

danke für die hilfe .... sorry, aber begehen diese fehler weil ich lerne einfach allen programm zu danken .. – franvergara66

Antwort

6

Wenn Sie diesen Code von here aufgehoben haben :-), haben Sie die Klasse, aber nicht den Konstruktor umbenannt. Nur Konstruktoren dürfen keine Rückgabetypen haben.

Ich schlage vor, dass Sie entweder die Klasse umbenennen oder den Konstruktor umbenennen.

Ich hoffe, das ist keine Hausaufgaben. So wie es aussieht, würde es Ihrem Erzieher leichtfallen, Plagiate zu beweisen. Sie müssen zumindest die Namen der Variablen sowie die Namen der Klassen ändern, Sie können sie auch ein wenig neu formatieren, einschließlich der Reihenfolge der Methoden in der Klasse.

Das ist, wenn es Hausaufgaben ist. Was ist es nicht, oder? :-)

+0

danke für die hilfe, es ist nicht meine hausaufgaben, meine schule lehrt nicht programmieren .... Ich habe ein Tutorial gelesen, aber ich bin schlecht für Programme = (.. Ich bin neu in der Welt der Programmierung ... Ich hoffe nicht stören ... Ich habe 13 Jahre = P – franvergara66

+0

Gib nicht auf, Kumpel, Wissensakkumulation ist ein beschleunigender Prozess, der jetzt langsam scheint, aber die Geschwindigkeit wird zunehmen. – paxdiablo

0

Der Name der Klasse ist file_read, so sollte der Konstruktor Namen file_read sein aber du hast den Namen als ReadWithScanner angegeben, weshalb er sich beschwert hat. Der Compiler denkt, dass es ein Methodenname ist, der einen Rückgabetyp erwartet.

3

Ihre „ReadWithScanner“ Konstruktor muss den Namen der Klasse übereinstimmen („file_read“)

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

Ihre Klasse File_read und Konstruktor genannt wird ReadWithScanner benannt. Die Warnung lautet, dass Ihr Konstruktor genauso benannt werden muss wie die Klasse.

Verwandte Themen