java - BufferedWriter - 程序执行期间流过早关闭

标签 java io bufferedwriter

我正在开发的类中定义一个缓冲编写器,但遇到问题。

在我定义的类构造函数中:

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/

相关文章:

用于 SSH 辅助登录验证的 Java API

regex - 在 PowerShell 中查找和替换字符串的问题

c# - Windows - C#- Directory.Move

java - Bufferedwriter 工作,但文件为空?

java - 变量可能尚未初始化,不确定如何解决

java - 无法写入 java 中的文件,因为它正在使用 System.out.println 打印

java - 获取 EntityManager 用于测试或生产的最佳实践

java - 我如何将网站与 Optaplanner(html、javascript、php)集成?

Java初学者: Why Does char Use ' ' Instead of ""?

Android - 字典文件。哪个更快,数据库还是直接读取文件?