قراءة ملف باستخدام الماسح الضوئي: لماذا أحصل على خطأ عند استخدام الماسح الضوئي لملفات قراءة الملفات في جافا؟

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 لكنك قدمت الاسم كإرساله إلى حد ما هو مشكته. التحويل البرمجي التفكير في اسم طريقة لذلك تتوقع نوع العودة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top