0

我的程序的这一部分出现了多个错误。它的基本作用是从一个无组织的文件 PersonnelInfo.txt 中读取输入,并将其排序到 EmployeeInfo 类中的一个数组中(未发布,因为我不相信问题出在该类中,如果你们愿意,我会贴出来供参考)。

在对信息(如姓名、身份证号、公司职务等)进行排序后,程序将其写入另一个文件 ORGANIZEDPersonnelInfo.txt,该文件将按如下方式排序:

姓名:此处为员工姓名

ID:这里的员工ID

等等

我遇到的一个错误是在“静态 FileWriter writeOut ...”行中,它是“未处理的异常类型 IOException。我在主方法声明中放置了一个 throws IOException,但它什么也没做。

接下来,在“public String toString()”方法中,我收到了多个错误。当我尝试使其无效时,它说返回类型与 Object.toString() 不兼容。当我将其保留为字符串并返回 null 时,它希望我使用 try/catch,但主要错误仍然存​​在。

请帮忙!这越来越令人沮丧...

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

5 回答 5

0

执行时static void main,您不在类的实例中,HR而是在它的静态方法中。所以如果你想使用toString()你写的方法,你必须这样做new HR().toString()

您最好从所有字段中删除 static 关键字并创建对象的实例HR,然后在该对象的构造函数中打开文件,即

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

这将允许您使用 toString() 方法并允许您以您想要的方式处理异常。

于 2012-11-30T21:33:21.443 回答
0

其他人有地址 toString(),所以我会去 FileWriter...

我会填充writeOut一个方法而不是静态范围,这样你就可以捕获异常,甚至尝试不同的文件名或其他东西:

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;
}
于 2012-11-30T21:33:40.450 回答
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();
}

主要打印内容:

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

但我会使用自己的写方法“writeEmployees(out)”来写,请参阅海报 JB Nizet 的解决方案

于 2012-11-30T21:31:24.697 回答
0

如果您覆盖toString()(正如您所做的那样,因为 toSTring() 是 Object 的一个方法,并且您正在您的类中重新定义它,它像所有类一样扩展 Object),您应该尊重被覆盖方法的约定,即是返回对象的字符串表示(而不是将字段写入缓冲写入器。用另一个名称命名此方法。

此外,您正在调用一个方法 ( out.write()),该方法会抛出一个检查异常:IOException。所以,要么你知道如何处理这个异常,你应该捕获它,或者你不知道如何处理它,并且方法应该声明它抛出异常:

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

您的程序中还有其他编译错误。每个都带有一条错误消息、一个文件名和一个行号。尝试理解消息并修复错误。阅读有关异常的 Java 教程以了解如何处理它们。

如果您在阅读本教程后仍然无法处理它们,请提出另一个问题并粘贴您从编译器获得的确切错误消息。

于 2012-11-30T21:31:56.967 回答
0

我建议将 Writer 的静态声明移到 main 中,原因有两个(一个是它们不需要是静态属性,并且 IOException 正在那里处理)。从文件中获取字符串toString并使用 writer 将字符串写入文件:

  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();
         }
     } 
于 2012-11-30T21:32:42.313 回答