我的程序的这部分得到了多个错误。它基本上是从无组织文件PersonnelInfo.txt中读取输入,并将其分类到EmployeeInfo类中的数组(未发布,因为我不相信问题在于该类,如果你们想要,我会发布以供参考)。
在对信息(如姓名,身份证号码,公司名称等)进行排序后,程序会将此信息写入另一个文件ORGANIZEDPersonnelInfo.txt,该文件将按如下方式排序:
名称:此处的员工姓名
ID:此处的员工ID
等
我得到的一个错误是在“静态FileWriter writeOut ...”行中,它是“未处理的异常类型IOException。我在主方法声明中抛出了IOException但它没有做任何事。”
接下来,在“public String toString()”方法中,我收到了多个错误。当我试图使其无效时,它表示返回类型与Object.toString()不兼容。当我将它保存为String并返回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;
}
答案 0 :(得分: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();
}
在main中打印内容:
HR hr = new HR();
out.write(hr.toString());
但我会用自己的写方法“writeEmployees(out)”编写 见海报JB Nizet的解决方案
答案 1 :(得分:0)
如果你覆盖toString()
(就像你正在做的那样,因为toSTring()是一个来自Object的方法,而你在类中重新定义它,它会像所有类一样扩展Object),你应该尊重重写方法的契约,即返回对象的String表示形式(而不是将字段写入缓冲的writer。将此方法命名为另一个名称。
此外,您正在调用一个抛出已检查异常的方法(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 tutorial about exceptions以了解如何处理它们。
如果在阅读本教程后仍然无法处理它们,请提出另一个问题并粘贴从编译器获得的确切错误消息。
答案 2 :(得分:0)
我建议在你的main中移动你的Writer静态声明有两个原因(一个是他们不需要是一个静态属性,而且还在那里处理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();
}
}
答案 3 :(得分: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()方法,并允许您按照您希望的方式处理异常。
答案 4 :(得分: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;
}