gpt4 book ai didi

java - 必须定义显式构造函数错误 Java

转载 作者:行者123 更新时间:2023-12-02 07:37:35 28 4
gpt4 key购买 nike

菜鸟问题。

卡在下面的代码上。对于粗体行,出现“默认构造函数无法处理隐式 super 构造函数抛出的异常类型 IOException。必须定义显式构造函数”错误

私有(private)FileWriter fileWriter = new FileWriter(file);具体来说,我的问题是......我如何为文件编写器创建显式构造函数?

第二个问题:我知道方法appendtoLog不正确。我只希望这个方法执行 bufferWriter.write(logInfo) 但为此我需要调用已经创建的 bufferWriter 对象。但是正如您所看到的,我已经在另一个方法中实例化了它,这阻止了它可用于appendtolog 方法。请提出解决方案或我的方法中的错误。

有什么帮助吗?谢谢。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class Logging {


private DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
private Date date = new Date();
private File file = new File("c:\\view\\" + dateFormat.format(date) + "\\"
+"\\SmokesLog.txt");
private FileWriter fileWriter = **new FileWriter(file);**

public void createLogFile() throws Exception {
try{
if(!file.exists()){
file.createNewFile();
System.out.println("file name is "+ file.getName());
BufferedWriter bufferWriter = new BufferedWriter(new
FileWriter(file.getName(),true));
bufferWriter.write("Log Started for Test");
}
} catch (IOException e) {
System.out.println("code failed in creating logfile");
}

}

public void appendToLog(String logInfo) throws IOException {
System.out.println("code got to appendToLog method");
// below does not append.need to find better method.
if (file.exists()) {
BufferedWriter bufferWriter = new BufferedWriter(fileWriter);
bufferWriter.write(logInfo);
System.out.println("Done");
}
}
}

最佳答案

正如人们所说,这是因为创建 FileWriter 会抛出异常。虽然我确实建议使用 Logger 包,但您可以通过以下方法来克服这个问题:

使用显式构造函数,捕获异常,并很可能重新抛出包含在 RuntimeException 中的异常。

private FileWriter fileWriter;

public Logging() {
super();
try {
fileWriter = new FileWriter(file);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}

或者使用实例初始化 block ,该 block 在构造函数中对 super() 的任何调用之后执行,但在构造函数中的任何其他代码之前执行。在您的情况下,如果您没有构造函数,则会调用隐式 super() ,这是可以的,因为您正在扩展 Object.因此初始化 block 在那之后立即执行。因此,以下代码在功能上与上面的代码几乎相同。

private FileWriter fileWriter;
{
try {
fileWriter = new FileWriter(file);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}

正如我所说,我不建议这样做,真正的日志包(slf4j + log4j)会更合适。

关于java - 必须定义显式构造函数错误 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com