017 インターフェイス(インターフェイスの実用例) 022 解答例

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

// ファイルの読み込みと書き込みを行うインターフェイス
interface FileOperation {
    String readFile(String filePath) throws IOException;
    void writeFile(String filePath, String content) throws IOException;
}

// FileOperation インターフェイスの実装クラス
class FileHandler implements FileOperation {
    @Override
    public String readFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append('\n');
            }
        }
        return content.toString();
    }

    @Override
    public void writeFile(String filePath, String content) throws IOException {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write(content);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // ファイルの読み込みと書き込みを行うための FileHandler インスタンスを生成
        FileOperation fileHandler = new FileHandler();

        // 読み込むファイルのパス
        String filePath = "example.txt";

        try {
            // ファイルの内容を読み込み
            String fileContent = fileHandler.readFile(filePath);
            System.out.println("File Content:\n" + fileContent);

            // 書き込む内容
            String newContent = "This is new content.";

            // ファイルに新しい内容を書き込み
            fileHandler.writeFile(filePath, newContent);

            System.out.println("File Content After Writing:\n" + fileHandler.readFile(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この例では、FileHandler クラスが FileOperation インターフェイスを実装しており、ファイルの読み込みと書き込みを行います。Main クラスでは、FileHandler クラスのインスタンスを生成し、ファイルの読み書き操作を実行しています。

ファイル操作のためのインターフェイス

ファイル操作のためのインターフェイスを設計することは、異なるクラスが共通のファイル操作メソッドを提供し、コードの再利用性と拡張性を高める手段です。以下に、このアプローチの解説を示します。

ファイル操作のためのインターフェイス(FileOperation)

import java.io.IOException;

interface FileOperation {
    String readFile(String filePath) throws IOException;
    void writeFile(String filePath, String content) throws IOException;
}
  1. readFile メソッド: ファイルの指定されたパスから内容を読み取り、文字列として返します。このメソッドは IOException をスローする可能性があるため、呼び出し元で例外処理が必要です。
  2. writeFile メソッド: 指定されたパスのファイルに指定された内容を書き込みます。同様に、このメソッドも IOException をスローする可能性があります。

ファイル操作の実装クラス(FileHandler)

import java.io.*;

class FileHandler implements FileOperation {
    @Override
    public String readFile(String filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append('\n');
            }
        }
        return content.toString();
    }

    @Override
    public void writeFile(String filePath, String content) throws IOException {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write(content);
        }
    }
}
  1. readFile メソッドの実装: BufferedReader を使用して指定されたファイルから行を読み取り、それを文字列に追加します。
  2. writeFile メソッドの実装: BufferedWriter を使用して指定されたファイルに文字列を書き込みます。

このように、FileHandler クラスは FileOperation インターフェイスを実装し、ファイルの読み書きメソッドを提供しています。他のクラスがファイル操作を行いたい場合、FileOperation インターフェイスを実装することで、同じインターフェイスを介してファイル操作の機能を利用できます。

「017 インターフェイス」問題集リスト