считывание файла с помощью сканера:Почему я получаю сообщение об ошибке при использовании сканера для чтения файлов в Java?

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

  •  12-09-2019
  •  | 
  •  

Вопрос

В этом примере демонстрируется использование сканера для чтения файла построчно (он не выполняет операцию записи) Я не знаю, почему я получаю сообщение об ошибке при попытке компиляции.Не мог бы кто-нибудь объяснить мне причину?.Я использую jcreatorLE и JDK 1.6 для запуска своей программы:

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

Это результат его запуска:

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

Process completed.
Это было полезно?

Решение

Когда вы удалили этот код из здесь :-), вы переименовали класс, но не конструктор.Только конструкторам разрешено не иметь возвращаемых типов.

Я предлагаю вам либо переименовать класс обратно, либо переименовать конструктор.

Надеюсь, это не домашнее задание.В нынешнем виде вашему преподавателю было бы легко доказать плагиат.Вам нужно будет, по крайней мере, изменить имена переменных, а также имена классов, возможно, вы также захотите немного переформатировать их, включая изменение порядка методов в классе.

Это если это домашнее задание.А это ведь не так, верно?:-)

Другие советы

Ваш конструктор "ReadWithScanner" должен соответствовать имени класса ("File_read").

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

Ваш класс назван File_read и ваш конструктор назван ReadWithScanner.Предупреждение заключается в том, что ваш конструктор должен иметь то же имя, что и класс.

Имя класса - File_read , поэтому имя конструктора должно быть File_read, но вы дали имя как ReadWithScanner, вот почему он жалуется.Компилятор думает, что это имя метода, поэтому ожидает возвращаемый тип.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top