HOWTO · Java

Java.IO.Io例外

このチュートリアルでは、Java の java.io.ioexception について説明します。

このチュートリアルでは、Java の java.io.ioexception について説明します。

Java の java.io.IOException

IOexception は、Java で最も一般的な例外です。 この例外の最も一般的な理由は次のとおりです。

  1. ファイルを読み込んでいますが、そのファイルは存在しません。
  2. ファイルを読み取りますが、権限がありません。
  3. ファイルを書き込んでいますが、ディスク容量がありません。
  4. ストリームを読み込んでいるが、そのストリームが他のプロセスによって閉じられている場合。
  5. ネットワーク ファイルを読み取るが、そのネットワークが切断されている場合。

Java.IO.IOexception は、システムの入出力データ ストリームとシリアライゼーションの例外を提供します。

Java の IO 例外には他にも多くの理由があります。 次の表は、Java の例外のタイプまたはサブクラスを示しています。

インターフェース 説明
InvalidClassException これは、シリアライゼーション ランタイムが無効なクラスを検出した場合に発生します。
InvalidObjectException これは、シリアル化オブジェクトが検証に失敗したことを示しています。
NotActiveException これは、シリアライゼーションまたはデシリアライゼーションがアクティブでないことを示します。
NotSerializableException これは、インスタンスがシリアライズ可能なインターフェースを持つ必要があることを示しています。
ObjectStreamException これは、すべてのオブジェクト ストリーム クラスのスーパークラスであることを示します。
CharConversionException 文字変換の例外に使用されます。
EOFException これは、入力中にストリームのファイルの終わりに達したことを示します。
FileNotFoundException これは、アクセスしようとしているファイルが存在しないことを示しています。
InterruptedIOException これは、入出力操作が中断されたことを示します。
OptionalDataException これは、プリミティブ データが読み取られていないか、ストリームのシリアル化可能なオブジェクトに属するデータの終わりが原因で、オブジェクトの読み取りが失敗したことを示します。
StreamCorruptedException これは、オブジェクト ストリームから読み取られた制御情報が内部整合性チェックに違反していることを示します。
SyncFailedException これは、同期操作が失敗したことを示します。
UnsupportedEncodingException これは、指定された文字エンコーディングがサポートされていないことを示します。
UTFDataFormatException これは、不正な形式の UTF-8 データが入力ストリームで読み取られたか、またはこのデータがデータ入力インターフェースを実装しているクラスによって読み取られたことを示します。
WriteAbortedException これは、書き込み操作中に ObjectStreamException がスローされたことを示します。

上記の例外は、メインの IO 例外のサブクラスのタイプです。 Java で IOException をスローする例を試してみましょう。

package delftstack;

import java.io.FileInputStream;
import java.io.IOException;

public class Example {
  public static void main(String[] args) throws Exception {
    FileInputStream File_Input_Stream = new FileInputStream("Demofile.txt");
    System.out.println("Check if the file is there. ");
  }
}

上記のコードは、アクセスしているファイルが存在しないため、IO FileNotFoundException をスローします。 出力を参照してください:

Exception in thread "main" java.io.FileNotFoundException: Demofile.txt (The system cannot find the file specified)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111)
    at delftstack.Example.main(Example.java:8)

これらの例外を処理するために、try-catch ブロックを使用して、JVM がコードをクラッシュさせないようにします。 解決策を参照してください。

package delftstack;

import java.io.FileInputStream;
import java.io.IOException;

public class Example {
  public static void main(String[] args) throws Exception {
    try {
      FileInputStream File_Input_Stream = new FileInputStream("Demofile.txt");
      System.out.println("Check if the file is there. ");
    } catch (IOException e) {
      // e.printStackTrace(); or
      System.out.println(e.getMessage());
    }
  }
}

上記のコードは同じエラー情報を出力しますが、コードをクラッシュさせることはありません。 出力を参照してください:

Demofile.txt (The system cannot find the file specified)

Java で End of File 例外 (EOFException) をスローする別の例を試してみましょう。

package delftstack;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Example {
  public void DemoCheck() {
    File file = new File("delftstack.txt");
    DataInputStream Data_Input_Stream = null;
    try {
      Data_Input_Stream = new DataInputStream(new FileInputStream(file));
      while (true) {
        Data_Input_Stream.readInt();
      }
    } catch (EOFException E_O_F_Exception) {
      E_O_F_Exception.printStackTrace();
    } catch (IOException I_O_Exception) {
      I_O_Exception.printStackTrace();
    } finally {
      try {
        if (Data_Input_Stream != null) {
          Data_Input_Stream.close();
        }
      } catch (IOException I_O_Exception) {
        I_O_Exception.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Example DemoExample = new Example();
    DemoExample.DemoCheck();
  }
}

ファイルを読み込もうとしていて、ファイルの終わりに到達したため、コードは EOFException をスローします。 出力を参照してください:

java.io.EOFException
    at java.base/java.io.DataInputStream.readInt(DataInputStream.java:398)
    at delftstack.Example.DemoCheck(Example.java:16)
    at delftstack.Example.main(Example.java:39)