我正在开发的类中定义一个缓冲编写器,但遇到问题。
在我定义的类构造函数中:
public class RestHandler {
public static BufferedWriter rest_logger;
public RestHandler(parsedXMLConfigData _config, BufferedWriter writer) {
rest_logger = writer;
try {
rest_logger.write("RestHandler instance finished init and ready to receive calls!" + "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这可以工作并将文本打印到我的文件中。但是当我尝试在另一个类方法中使用相同的 rest_logger
时:
@POST
@Path("{subResources: [a-zA-Z0-9_/]+}")
public void postHandler
(
@Context final UriInfo uriInfo,
@PathParam("subResources") String subResources) {
try {
rest_logger.write("TEXT...");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
它给了我一个流关闭异常!我应该提到我用它来关闭流:
protected void finalize() throws Throwable {
rest_logger.close();
}
最佳答案
您的代码存在几个问题:
- rest_logger 变量不应是静态的
- 您不应该将其初始化为新的 BufferedWriter 只是为了随后丢弃它并使用 writer 参数(您无法控制)重新初始化它
- 你不应该忽略异常。如果您不知道如何处理它们,请让您的方法抛出 IOException 并让调用者决定要做什么
- 你不应该使用终结器
- 您不应该关闭不是您创建的 writer。让作者的开场白将其关闭。
除此之外,由于您的代码没有多大意义,因此很难理解代码应该做什么。
关于java - BufferedWriter - 程序执行期间流过早关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9340248/