PR

Java.ioパッケージを使用したファイルの読み書き方法を3分で解説

Java

Javaのjava.ioパッケージを使うとファイルの読み書き系の処理を行うことができます。

参考 Javaの「パッケージ」とは?

java.ioパッケージには、テキストファイルやバイナリファイルを扱うための便利なクラスがたくさん用意されており、これを使うことで効率的なファイル操作が可能に。ファイルの読み書きができるようになると、データの保存や読み込みがスムーズに行えるようになるので、活用必須の超・重要知識です。

スポンサーリンク

java.ioとは

java.ioは、Javaでファイルやデータを入力(読み込み)・出力(書き込み)するためのツールがたくさん入ったパッケージ(ツール集)です。このパッケージには、テキストファイルやバイナリファイルを簡単に操作するためのクラスが揃っています。

例えば、ファイルからデータを読み込んだり、ファイルにデータを書き込んだりするのに使います。

java.ioを使うことで、ファイル操作がシンプルで効率的に行えるようになります。

java.ioパッケージの主要なクラス

以下は、java.ioパッケージに含まれる主要なクラス。まずは、このパッケージを使うことでどんな処理が行えそうなのか?を概要を押さえておきます。

クラス名説明
Fileファイルやディレクトリを表すクラス。
ファイルの作成、削除、情報取得に使用される。
FileReaderテキストファイルを読み込むためのクラス。
FileWriterテキストファイルに書き込むためのクラス。
BufferedReaderテキストファイルの効率的な読み込みをサポートするクラス。
BufferedWriterテキストファイルの効率的な書き込みをサポートするクラス。
FileInputStreamバイナリファイルを読み込むためのクラス。
FileOutputStreamバイナリファイルに書き込むためのクラス。
InputStreamReaderバイト入力ストリームを文字入力ストリームに変換するクラス。
OutputStreamWriter文字出力ストリームをバイト出力ストリームに変換するクラス。
ObjectInputStreamオブジェクトを読み込むためのクラス(シリアライズとデシリアライズに使用)。
ObjectOutputStreamオブジェクトを書き込むためのクラス(シリアライズとデシリアライズに使用)。
PrintWriter文字出力を簡単に行うためのクラス。
PrintStreamバイト出力を簡単に行うためのクラス。
RandomAccessFileファイルのランダムアクセス(任意の位置から読み書き)を可能にするクラス。

java.ioパッケージは、さまざまな形式のファイル(csvやtxtはもちろん、json形式など)を扱うことができます。また、「.bin」や「.jpg」などのバイナリファイルも扱うことができます。つまり、このパッケージの使い方をある程度マスターすれば、Javaで一通りのファイル操作が可能になるということ。

ここからは代表的ないくつかのクラスを用いて簡単なファイル操作を行う例をご説明していきます。

Java.ioパッケージの使い方:ファイルの読み書き

ここでは、テキストファイルの読み書きを例にして説明します。この例を通して、java.ioパッケージの基本的な使い方を理解しましょう。

サンプルコード テキストファイルへの書き込み

テキストファイルにデータを書き込み、その後、書き込んだデータを読み込むプログラムの例。

import java.io.FileWriter;
import java.io.IOException;

public class SimpleFileWriteExample {
    public static void main(String[] args) {
        // ファイルに書き込む内容
        String content = "Hello, World!\nWelcome to java.io package.";

        // FileWriterを使ってファイルに書き込み
        try (FileWriter fw = new FileWriter("example.txt")) {
            fw.write(content);
            System.out.println("ファイルへの書き込みが完了しました。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. FileWriter
    • FileWriterは、テキストファイルに文字データを書き込むためのクラス。
  2. try-with-resources構文
    • この構文は、Java 7で導入されたもので、リソース(ここではファイル)を自動的に閉じることができるようにするためのもの。tryブロックの後にリソースを指定すると、tryブロックが終了したときに自動的にリソースがクローズ→リソースリークを防ぐために非常に有用な手段でJava.ioパッケージとセットで頻繁に利用されます。(関連 try-catch構文
  3. IOException
    • ファイル操作を行う際には、入出力エラー(IOException)が発生する可能性があります。例えば、ファイルが存在しない場合や、読み書きの途中でエラーが発生した場合。これらのエラーは、try-catchブロックでキャッチして処理します。ここでは、エラーが発生した場合にスタックトレースを出力することで、エラーの詳細を確認できるようにしています。

サンプルコード ファイルの読み込み

import java.io.FileReader;
import java.io.IOException;

public class SimpleFileReadExample {
    public static void main(String[] args) {
        // FileReaderを使ってファイルから読み込み
        try (FileReader fr = new FileReader("example.txt")) {
            int character;
            while ((character = fr.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

関連 Java:while文の使い方を1分で解説

  1. FileReader
    • FileReaderは、テキストファイルから文字データを読み込むためのクラスです。コンストラクタにファイル名を渡すと、そのファイルを開きます。
  2. IOException
    • ファイル操作中にエラーが発生した場合、IOExceptionがスローされます。try-catchブロックでこの例外をキャッチし、エラーメッセージを出力しています。
  3. データの読み込み
    • FileReaderreadメソッドを使って、ファイルから1文字ずつデータを読み込みます。読み込んだデータは整数値として返されるため、それを文字型に変換して出力。ファイルの終わりに達すると、readメソッドは-1を返します。(参考 メソッドとは?

java.ioパッケージの便利な機能

java.ioパッケージには、ファイルの読み書き以外にも多くの便利な機能が含まれています。ここでは、いくつかの重要なポイントと知っておくべき内容を紹介します。

ファイルとディレクトリの操作

java.io.Fileクラスは、ファイルやディレクトリの操作を行うための基本的なクラスです。このクラスを使用して、ファイルやディレクトリの作成、削除、名前の変更、情報の取得などができます。

サンプルコード ファイルとディレクトリの操作

import java.io.File;
import java.io.IOException;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");

        // ファイルの存在確認
        if (file.exists()) {
            System.out.println("File exists");
        } else {
            System.out.println("File does not exist");

            // ファイルの作成
            try {
                if (file.createNewFile()) {
                    System.out.println("File created");
                } else {
                    System.out.println("File already exists");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // ファイルの削除
        if (file.delete()) {
            System.out.println("File deleted");
        } else {
            System.out.println("Failed to delete file");
        }
    }
}

参考 Java:if文の使い方・基本

  1. existsメソッド
    • ファイルの存在を確認する
  2. createNewFileメソッド
    • 新しいファイルを作成する
  3. deleteメソッド
    • ファイルを削除する

サンプルコード ディレクトリの操作

import java.io.File;

public class DirectoryExample {
    public static void main(String[] args) {
        File dir = new File("exampleDir");

        // ディレクトリの作成
        if (!dir.exists()) {
            if (dir.mkdir()) {
                System.out.println("Directory created");
            } else {
                System.out.println("Failed to create directory");
            }
        }

        // ディレクトリの内容をリスト化
        String[] files = dir.list();
        if (files != null) {
            for (String file : files) {
                System.out.println(file);
            }
        }

        // ディレクトリの削除
        if (dir.delete()) {
            System.out.println("Directory deleted");
        } else {
            System.out.println("Failed to delete directory");
        }
    }
}
  1. mkdirメソッド
    • ディレクトリを作成する
  2. listメソッド
    • ディレクトリ内のファイルやディレクトリの名前を取得する
  3. deleteメソッド
    • 空のディレクトリを削除する

シリアライズとデシリアライズ

シリアライズは、オブジェクトをバイトストリームに変換してファイルに保存することを指します。デシリアライズは、その逆で、バイトストリームからオブジェクトを復元することです。これにはObjectOutputStreamObjectInputStreamを使用します。

Q
バイトストリームとは?
A

データをバイト単位で読み書きするためのストリームです。ストリームとは、データの流れを抽象化したもので、データを順序よく処理することができます。Javaでは、バイトストリームを使ってバイナリデータ(画像、音声、ビデオファイルなど)やテキストデータを読み書きします。

サンプルコード オブジェクトのシリアライズとデシリアライズ

import java.io.*;

class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);

        // シリアライズ
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            oos.writeObject(person);
            System.out.println("オブジェクトがシリアライズされました。");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // デシリアライズ
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person deserializedPerson = (Person) ois.readObject();
            System.out.println("デシリアライズされたオブジェクト: " + deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
  1. Personクラス
    • Serializableインターフェースを実装しています。このインターフェースを実装することで、そのオブジェクトがシリアライズ可能になります。
  2. ObjectOutputStream
    • オブジェクトをファイルにシリアライズ。
  3. ObjectInputStream
    • ファイルからオブジェクトをデシリアライズします。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Java
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました