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

时间:2012-02-18 10:03:21

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

3 个答案:

答案 0 :(得分:4)

您的代码存在一些问题:

  • rest_logger变量不应该是静态的
  • 你不应该将它初始化为新的BufferedWriter,然后再将其丢弃并使用writer参数重新初始化(你无法控制)
  • 你不应该忽视异常。如果您不知道如何处理它们,请让您的方法抛出IOException并让调用者决定该怎么做
  • 你不应该使用终结者
  • 你不应该关闭你没有创建的作家。让作者的揭幕战结束吧。

除此之外,由于您的代码没有多大意义,因此很难理解代码应该做什么。

答案 1 :(得分:1)

为了清楚起见,删除了异常处理程序,代码确实:

rest_logger = new BufferedWriter(new FileWriter("rest_logger.txt"));
rest_logger = writer;

你立即扔掉那个新的BufferedWriter。它没有多大意义。 rest_logger将设置为在构造函数调用中移交给您的任何内容。关闭后,rest_logger也会关闭。

答案 2 :(得分:1)

我不太确定我理解你的问题,但是:

为什么要覆盖新创建的BufferedWriter?

rest_logger = writer;

也许你应该研究一下......