2012-11-30 2 views
0

내 프로그램에서이 부분에 여러 번 오류가 발생했습니다. 기본적으로 unorganized 파일 인 PersonnelInfo.txt에서 입력을 읽은 다음 EmployeeInfo 클래스의 배열로 정렬합니다. 게시자가 문제가 있다고 생각하지 않기 때문에 게시하지 않습니다. 참조 용으로 게시하십시오).자바 쓰기 프로그램 처리되지 않은 예외 유형 IOException

이름 : 직원 이름

에서 정보를 정렬 한 후 (같은 이름, ID 번호, 회사의 제목 등) 프로그램과 같은 정렬됩니다 다른 파일, ORGANIZEDPersonnelInfo.txt, 이것을 기록 여기

ID :. 여기에 직원 ID는

라인은 그것이 "입니다 IOException이 내가 넣어 처리되지 않은 예외 유형은 던졌습니다 내가 얻고

한 오류가 ..."정적 FileWriter writeOut "는에있다 주 메소드 d 내의 IOException eclaration하지만 아무것도하지 않았다.

다음으로 "public String toString()"메서드에서 여러 오류가 발생합니다. void로 만들려고 할 때 반환 형식이 Object.toString()과 호환되지 않는다고합니다. String으로 유지하고 null을 반환하면 try/catch를 사용하기를 원하지만 주 오류는 여전히 존재합니다.

도와주세요! "

HR hr = new HR(); 
out.write(hr.toString()); 

하지만이 자신의 쓰기 방법을 사용하여 작성합니다 : 이것은 당신이 내용을 인쇄 ...

import java.io.*; 
import java.util.Scanner; 

public class HR { 

static EmployeeInfo[] employee = new EmployeeInfo[4]; 
static FileWriter writeOut = new FileWriter("/Users/zach/Documents/workspace/Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt"); 
static BufferedWriter out = new BufferedWriter(writeOut); 


public static void main(String[] args) throws IOException { 
    File PersonnelInfo = new File("/Users/zach/Documents/workspace/Dec. 10, 2012/src/PersonnelInfo.txt"); 
    Scanner inputFile = new Scanner(PersonnelInfo); 

    int numOfEmployees = Integer.parseInt(inputFile.nextLine()); 
    System.out.println("Number of employees: " + numOfEmployees); 



    for (int i = 0; i < 4; i++) { 
     String name = inputFile.nextLine(); 
     String ID = inputFile.nextLine(); 
     String title= inputFile.nextLine(); 
     String startDate = inputFile.nextLine(); 
     employee[i] = new EmployeeInfo(name, ID, title, startDate); 
    } 

    listEmployeeInfo(); 
    employee.toString(); 

} 


public String toString() { 
    for (EmployeeInfo i: employee) { 
     out.write("Name: " + i.getName()); 
     out.write("ID: " + i.getID()); 
     out.write("Title: " + i.getTitle()); 
     out.write("Start Date: " + i.getStartDate()); 
    } 
    return null; 
} 

답변

0

수정 toString() 주에서

public String toString() { 
    StringBuffer buf = new StringBuffer(); 
    for (EmployeeInfo i: employee) { 
     buf.append("Name: ").append(i.getName()); 
     buf.append("ID: ").append(i.getID()); 
     // .... 
    } 
    return buf.toString(); 
} 

을 꽤 실망지고 writeEmployees (out) " 포스터의 해결책을 참조하십시오 JB Nizet

+0

그것은 파일에 기록,하지만 난 [LEmployeeInfo을 얻을, 나는 너무 선택할 것 18,872,380 @ 직접 파일에 쓸 수 있지만,이 프로젝트를 위해 우리가하는 방법을 사용해야합니다. – Zach

+0

hr hr = new Hr(); out.write (hr.toString()); – AlexWien

+0

하지만 지금은 좀 추해집니다. – AlexWien

0

를 무시하면toSTring()은 Object의 메서드이기 때문에 모든 클래스가 그러 하듯이 Object를 확장 한 클래스에서 재정의하고 있으므로 오버라이드 된 메서드의 계약을 존중해야합니다. 오브젝트의 String 표현을 돌려줍니다 (버퍼 된 라이터에 필드를 기입하지 말아주세요). 이 메소드의 이름을 다른 이름으로 지정하십시오.

또한 확인 된 예외 인 IOException을 throw하는 메서드 (out.write())를 호출하고 있습니다.

public void writeToOut() throws IOException { 
    for (EmployeeInfo i: employee) { 
     out.write("Name: " + i.getName()); 
     out.write("ID: " + i.getID()); 
     out.write("Title: " + i.getTitle()); 
     out.write("Start Date: " + i.getStartDate()); 
    } 
} 

당신은 다른 컴파일이 : 그래서, 어느 당신은이 예외를 처리하고, 당신이 그것을 잡을해야한다, 또는 당신이 그것을 처리하는 방법을 알고하지 않으며, 메소드가 예외를 throw 것을 선언하는 방법을 알고 프로그램의 오류. 각 파일에는 오류 메시지, 파일 이름 및 행 번호가 있습니다. 메시지를 이해하고 오류를 수정하십시오. 처리 방법을 이해하려면 Java tutorial about exceptions을 읽으십시오.

이 튜토리얼을 읽은 후에도 여전히 문제가 해결되지 않으면 다른 질문을하고 컴파일러에서 얻은 정확한 오류 메시지를 붙여 넣으십시오.

0

Writer의 정적 선언을 두 가지 이유로 이동하는 것이 좋습니다. 하나는 정적 속성 일 필요가 없으며 IOException도 처리 중입니다.toString에서 문자열을 얻고 파일의 문자열을 쓰기 위해 작가를 사용

public class HR { 

    static EmployeeInfo[] employee = new EmployeeInfo[4]; 


    public static void main(String[] args) throws IOException { 
     FileWriter writeOut = 
        new FileWriter("/Users/zach/Documents/workspace/"+ 
            "Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt"); 
     BufferedWriter out = new BufferedWriter(writeOut); 

     File PersonnelInfo = new File("/Users/zach/Documents/workspace/"+ 
             "Dec. 10, 2012/src/PersonnelInfo.txt"); 
     Scanner inputFile = new Scanner(PersonnelInfo); 

     .... 
     //write employee string in the file 
     out.write(getEmployeeString()); 
     out.close(); 
    } 

    public String getEmployeeString() { 
    StringBuilder stringBuilder = new StringBuilder(); 
    for (EmployeeInfo i: employee) { 
      stringBuilder.append("Name: " + i.getName()); 
      stringBuilder.append("ID: " + i.getID()); 
      stringBuilder.append("Title: " + i.getTitle()); 
      stringBuilder.append("Start Date: " + i.getStartDate()); 
    } 
    return stringBuilder.toString(); 
    }  
} 

당신은 그 예외는 다음과 같이 처리와 정적 블록에서 초기화를 그 정적 변수를 만들 필요가해야하는 경우 :

 static FileWriter writeOut; 
    static BufferedWriter out; 

    static { 
     try{ 
      writeOut = 
        new FileWriter("/Users/zach/Documents/workspace/"+ 
            "Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt"); 
       out = new BufferedWriter(writeOut); 
     }catch(IOException ioex){ 
       ioex.printStackTrace(); 
     } 
    } 
+0

감사합니다.이 솔루션은 파일에 프로그램 쓰기를 가져 오지만 이제는 [LEmployeeInfo; @ 39617189를 작성하므로 무슨 일이 일어나는지 알아야합니다. – Zach

+0

@Zach 내 측면에서 그 간단한 오류. 'out.write (employee.String());'(직원 클래스에서 toString 메서드를 호출하는) 대신'out.write (toString());'만 사용해야합니다. 그러나 이것은 좋지 않습니다. 메서드 명을'toString()'에서'getEmployeeString()'으로 변경하고'out.write (getEmployeeString());'를 사용하는 것을 추천합니다. 나는 대답을 업데이트했다. –

0

static void main을 실행할 때 사용자는 클래스 HR의 인스턴스가 아니라 정적 메서드입니다. 당신은 당신이 작성한 toString() 방법을 사용하려는 경우, 당신은 new HR().toString()

을해야 할 것입니다 그래서 당신은 모든 분야에서 static 키워드를 제거하고 HR 객체의 인스턴스를 생성 한 다음 열어 더 나을 것 이것은 당신이 toString() 메서드를 사용하고 예외 당신이 원하는 방식으로 처리 할 수 ​​있도록 허용 것, 즉

public HR() { 
    try { 
    this.writeOut = new FileWriter("/Users/zach/Documents/workspace/Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt"); 
    } catch (IOException e) { 
    // handle it, etc. 
    } 
} 

public void processFile() { 
    // Do the stuff 
} 

public static void main(String[] args) { 
    HR myHR = new HR().processFile(); 
    // etc. 
} 

, 그 객체의 생성자에 파일.

나는 시도조차 당신이 예외를 잡을 수 있도록 정적 범위보다는 방법에 writeOut을 채우고 것 ...

0

다른 사람은 주소의 toString()를 가지고, 그래서 FileWriter에서 이동을거야 다른 파일 이름이나 뭐 :

FileWriter openOutputfile(String name) 
{ 
    boolean done = false; 
    FileWriter result = null 
    try { 
     result = new FileWriter(...); 
     done = true; 
    } 
    catch(IOException ex) { 
     // print the stack trace 
     // prompt for another filename 
     // name = read line 
    } 
    return result; 
} 
관련 문제