1. ホーム
  2. java

[解決済み] Closeable を実装しているか、AutoCloseable を実装している。

2022-04-27 12:13:14

質問

Javaを勉強している最中なのですが、このページで紹介されている implements Closeableimplements AutoCloseable のインターフェイスを使用します。

を実装したところ interface Closeable を使用すると、Eclipse IDE は public void close() throws IOException .

を使用してストリームを閉じることができます。 pw.close(); インターフェイスを使用せずに しかし、どのようにすれば close() メソッドを使用します。また、このインターフェースは何のためにあるのでしょうか?

また、次のことも知りたいです。 IOstream は本当に閉じていたのでしょうか?

私は以下の基本的なコードを使っていました。

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 {


}

解決方法は?

インターフェイスにあまり慣れていないようですね。あなたが投稿したコードでは、インターフェイスを実装する必要はありません。 AutoCloseable .

を実装するだけでよい(はず)。 Closeable または AutoCloseable を実装しようとしているのであれば PrintWriter ファイルや他のリソースを処理し、クローズする必要があります。

あなたの実装では pw.close() . これは、finally ブロックの中で行う必要があります。

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) {
      }
   }
}

上のコードはJava6関連です。Java 7 では、これはよりエレガントに行うことができます ( この回答 ).