implements Closeable or implements AutoCloseable

java, java-io

Solution

In the code you have posted, you don't need to implement `AutoCloseable`.

You only have to (or should) implement `Closeable` or `AutoCloseable` if you are about to implement your own `PrintWriter`, which handles files or any other resources which needs to be closed.

In your implementation, it is enough to call `pw.close()`. You should do this in a finally block:

PrintWriter pw = null;
try {
   File file = new File("C:\\test.txt");
   pw = new PrintWriter(file);
} catch (IOException e) {
   System.out.println("bad things happen");
} finally {
   if (pw != null) {
      try {
         pw.close();
      } catch (IOException e) {
      }
   }
}

The code above is Java 6 related. In Java 7 this can be done more elegantly (see this answer).

Problem

I'm in the process of learning Java and I cannot find any good explanation on the `implements Closeable` and the `implements AutoCloseable` interfaces. When I implemented an `interface Closeable`, my Eclipse IDE created a method `public void close() throws IOException`. I can close the stream using `pw.close();` without the interface. But, I cannot understand how I can implement the`close()` method using the interface. And, what is the purpose of this interface? Also I would like to know: how can I check if `IOstream` was really closed? I was using the basic code below ``` import java.io.*; public class IOtest implements AutoCloseable { public static void main(String[] args) throws IOException { File file = new File("C:\\test.txt"); PrintWriter pw = new PrintWriter(file); System.out.println("file has been created"); pw.println("file has been created"); } @Override public void close() throws IOException { } ```

Original source