2009-04-20 3 views
1

이 예제는 Scanner를 사용하여 파일을 한 줄씩 읽는 방법을 보여줍니다 (쓰기 작업을 수행하지 않음). 컴파일하려고 할 때 왜 오류가 발생하는지 알지 못합니다. 누군가 나에게 그 이유를 설명 할 수 있을까요?. 이 그것을 실행 한 결과는스캐너를 사용하여 파일 읽기 : 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; 
    } 
} 

: 내 프로그램을 실행 jcreatorLE과 JDK 1.6를 사용하고

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

도움을 주셔서 감사합니다. 미안하지만 모든 프로그램에 감사 드리며 이러한 실수를 저 지르겠습니다. – franvergara66

답변

6

코드를 here :-)에서 해제하면 클래스의 이름이 변경되지만 생성자는 변경되지 않습니다. 생성자 만 반환 유형을 가질 수 없습니다.

클래스의 이름을 바꾸거나 생성자의 이름을 바꾸는 것이 좋습니다.

저는 이것이 숙제가 아니기를 바랍니다. 그것이 그대로, 당신의 교육자는 표절을 증명하는 쉬운 시간을 가질 것입니다. 클래스 이름뿐만 아니라 변수 이름도 최소한 변경해야합니다. 클래스의 메서드 순서를 변경하는 등 조금 더 형식을 다시 지정해야 할 수도 있습니다.

숙제 인 경우입니다. 어느 쪽이지, 그렇지? :-)

+0

도움을 주셔서 감사합니다. 숙제가 아니며 학교에서 프로그래밍을 가르치지 않습니다 .... 나는 튜토리얼을 읽고 있었지만 프로그램에 좋지는 않다. (.. 나는 프로그래밍 세계에 새로운 사람들이다. 나는 걱정하지 않기를 바란다. 나는 13 년 = P를 가지고있다. – franvergara66

+0

포기하지 말고, 배우자, 지식 축적은 가속화되는 과정입니다. 속도는 느려지지만 속도는 빨라질 것입니다. – paxdiablo

0

생성자 이름이 있어야 할 수 있도록하는 클래스의 이름은, File_read File_read입니다 하지만 그 이름을 ReadWithScanner로 지정했기 때문에 ReadWithScanner가 불평하는 이유입니다. 컴파일러는 메쏘드 이름을 생각하여 리턴 타입을 기대합니다.

3

귀하의 "ReadWithScanner"생성자는 클래스의 이름 당신의 클래스가 File_read라는 당신의 생성자가 ReadWithScanner라는

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

("File_read")을 일치해야합니다. 경고는 생성자가 클래스와 동일한 이름을 지정해야한다는 것입니다.

관련 문제