ファイル

Java – ファイルを読み込んで1行ずつ配列に格納する方法

Javaでファイルを読み込み、1行ずつ配列に格納するには、java.nio.file.FilesクラスのreadAllLinesメソッドを使用するのが簡単です。

このメソッドは、指定したファイルの内容をリスト形式で返します。

その後、リストを配列に変換することで対応できます。

ファイルのパスはPaths.get("ファイルパス")で指定します。

例として、List<String>toArrayメソッドでString[]に変換する方法が一般的です。

ファイルを1行ずつ配列に格納する方法の概要

Javaでは、ファイルを読み込んでその内容を配列に格納することができます。

この方法は、テキストファイルのデータを処理する際に非常に便利です。

特に、各行を個別に扱いたい場合に役立ちます。

以下に、ファイルを1行ずつ配列に格納する方法の概要を示します。

主な手法

  • Files.readAllLinesメソッドを使用する方法
  • BufferedReaderを使用する方法

これらの手法は、ファイルの読み込みにおいて異なるアプローチを提供しますが、最終的には同じ目的を達成します。

次のセクションでは、これらの手法について詳しく解説します。

Files.readAllLinesを使った方法

JavaのFilesクラスには、ファイルを簡単に読み込むための便利なメソッドが用意されています。

その中でもreadAllLinesメソッドを使用すると、指定したファイルの全行を一度に読み込み、List<String>として返します。

このリストを配列に変換することで、各行を配列に格納することができます。

以下は、Files.readAllLinesを使用してファイルを読み込み、1行ずつ配列に格納するサンプルコードです。

ファイル名はApp.javaとします。

import java.nio.file.Files; // Filesクラスをインポート
import java.nio.file.Paths; // Pathsクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
import java.util.List; // Listインターフェースをインポート
public class App {
    public static void main(String[] args) {
        try {
            // ファイルを読み込み、全行をリストに格納
            List<String> lines = Files.readAllLines(Paths.get("sample.txt"));
            
            // リストを配列に変換
            String[] linesArray = lines.toArray(new String[0]);
            
            // 配列の内容を表示
            for (String line : linesArray) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            e.printStackTrace();
        }
    }
}

上記のコードを実行すると、sample.txtファイルの内容が1行ずつ表示されます。

例えば、sample.txtに以下の内容が含まれている場合:

こんにちは
Javaプログラミング
ファイル読み込み

出力結果は次のようになります。

こんにちは
Javaプログラミング
ファイル読み込み

この方法は、ファイルの全行を一度に読み込むため、シンプルで効率的です。

ただし、大きなファイルを扱う場合はメモリに注意が必要です。

次のセクションでは、BufferedReaderを使用した方法について解説します。

BufferedReaderを使った方法

BufferedReaderは、テキストファイルを効率的に読み込むためのクラスです。

このクラスを使用すると、ファイルを1行ずつ読み込むことができ、メモリの使用を抑えながら大きなファイルを処理するのに適しています。

BufferedReaderを使ってファイルを読み込み、各行を配列に格納する方法を以下に示します。

以下は、BufferedReaderを使用してファイルを1行ずつ読み込み、配列に格納するサンプルコードです。

ファイル名はApp.javaとします。

import java.io.BufferedReader; // BufferedReaderクラスをインポート
import java.io.FileReader; // FileReaderクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
import java.util.ArrayList; // ArrayListクラスをインポート
public class App {
    public static void main(String[] args) {
        ArrayList<String> linesList = new ArrayList<>(); // 行を格納するリストを作成
        
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
            String line;
            // ファイルから1行ずつ読み込む
            while ((line = br.readLine()) != null) {
                linesList.add(line); // リストに行を追加
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            e.printStackTrace();
        }
        
        // リストを配列に変換
        String[] linesArray = linesList.toArray(new String[0]);
        
        // 配列の内容を表示
        for (String line : linesArray) {
            System.out.println(line);
        }
    }
}

上記のコードを実行すると、sample.txtファイルの内容が1行ずつ表示されます。

例えば、sample.txtに以下の内容が含まれている場合:

こんにちは
Javaプログラミング
ファイル読み込み

出力結果は次のようになります。

こんにちは
Javaプログラミング
ファイル読み込み

この方法では、BufferedReaderを使用してファイルを1行ずつ読み込むため、メモリの使用を抑えることができます。

特に大きなファイルを扱う際に有効です。

また、try-with-resources文を使用することで、リソースの自動クローズが行われ、コードがより安全になります。

次のセクションでは、エラーハンドリングの実装について解説します。

エラーハンドリングの実装

ファイルを読み込む際には、さまざまなエラーが発生する可能性があります。

例えば、指定したファイルが存在しない場合や、読み込み権限がない場合などです。

Javaでは、これらのエラーを適切に処理するために、例外処理を使用します。

以下に、エラーハンドリングの実装方法について解説します。

例外処理の基本

Javaでは、try-catch文を使用して例外を捕捉し、エラーが発生した場合の処理を行います。

ファイル操作に関連する例外としては、IOExceptionが一般的です。

以下のポイントに注意して実装します。

  • tryブロック: エラーが発生する可能性のあるコードを記述します。
  • catchブロック: 発生した例外を捕捉し、適切な処理を行います。
  • finallyブロック: リソースのクリーンアップ処理を行うことができます(必要に応じて)。

以下は、BufferedReaderを使用したファイル読み込みの例にエラーハンドリングを追加したサンプルコードです。

ファイル名はApp.javaとします。

import java.io.BufferedReader; // BufferedReaderクラスをインポート
import java.io.FileReader; // FileReaderクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
import java.util.ArrayList; // ArrayListクラスをインポート
public class App {
    public static void main(String[] args) {
        ArrayList<String> linesList = new ArrayList<>(); // 行を格納するリストを作成
        
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
            String line;
            // ファイルから1行ずつ読み込む
            while ((line = br.readLine()) != null) {
                linesList.add(line); // リストに行を追加
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            System.err.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
        }
        
        // リストを配列に変換
        String[] linesArray = linesList.toArray(new String[0]);
        
        // 配列の内容を表示
        for (String line : linesArray) {
            System.out.println(line);
        }
    }
}

上記のコードを実行すると、sample.txtファイルが存在しない場合、次のようなエラーメッセージが表示されます。

ファイルの読み込み中にエラーが発生しました: sample.txt (そのようなファイルやディレクトリはありません)

この実装では、IOExceptionを捕捉し、エラーメッセージを標準エラー出力に表示しています。

これにより、ユーザーは何が問題であるかを理解しやすくなります。

エラーハンドリングは、プログラムの信頼性を高めるために非常に重要です。

次のセクションでは、これらの手法を応用した例について解説します。

応用例

ファイルを1行ずつ配列に格納する基本的な方法を理解した後、さまざまな応用が可能です。

ここでは、ファイルの内容を特定の条件でフィルタリングしたり、データを加工したりする例を紹介します。

これにより、実際のアプリケーションでの利用シーンをイメージしやすくなります。

特定のキーワードを含む行の抽出

特定のキーワードを含む行だけを抽出し、配列に格納する方法を示します。

以下のサンプルコードでは、sample.txtから Java というキーワードを含む行を抽出します。

import java.io.BufferedReader; // BufferedReaderクラスをインポート
import java.io.FileReader; // FileReaderクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
import java.util.ArrayList; // ArrayListクラスをインポート
public class App {
    public static void main(String[] args) {
        ArrayList<String> linesList = new ArrayList<>(); // 行を格納するリストを作成
        
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
            String line;
            // ファイルから1行ずつ読み込む
            while ((line = br.readLine()) != null) {
                //  `Java` を含む行をリストに追加
                if (line.contains("Java")) {
                    linesList.add(line);
                }
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            System.err.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
        }
        
        // リストを配列に変換
        String[] linesArray = linesList.toArray(new String[0]);
        
        // 配列の内容を表示
        for (String line : linesArray) {
            System.out.println(line);
        }
    }
}

行数のカウント

ファイル内の行数をカウントする方法もあります。

以下のサンプルコードでは、sample.txtの行数をカウントし、表示します。

import java.io.BufferedReader; // BufferedReaderクラスをインポート
import java.io.FileReader; // FileReaderクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
public class App {
    public static void main(String[] args) {
        int lineCount = 0; // 行数をカウントする変数
        
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"))) {
            String line;
            // ファイルから1行ずつ読み込む
            while ((line = br.readLine()) != null) {
                lineCount++; // 行数をカウント
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            System.err.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
        }
        
        // 行数を表示
        System.out.println("ファイルの行数: " + lineCount);
    }
}

データの加工

ファイルの内容を加工して新しいファイルに書き込むこともできます。

以下のサンプルコードでは、sample.txtの内容をすべて大文字に変換し、新しいファイルoutput.txtに書き込みます。

import java.io.BufferedReader; // BufferedReaderクラスをインポート
import java.io.BufferedWriter; // BufferedWriterクラスをインポート
import java.io.FileReader; // FileReaderクラスをインポート
import java.io.FileWriter; // FileWriterクラスをインポート
import java.io.IOException; // IOExceptionクラスをインポート
public class App {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("sample.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
            String line;
            // ファイルから1行ずつ読み込む
            while ((line = br.readLine()) != null) {
                // 行を大文字に変換して新しいファイルに書き込む
                bw.write(line.toUpperCase());
                bw.newLine(); // 改行を追加
            }
        } catch (IOException e) {
            // エラーが発生した場合の処理
            System.err.println("ファイルの読み込みまたは書き込み中にエラーが発生しました: " + e.getMessage());
        }
    }
}

これらの応用例を通じて、ファイルの読み込みやデータ処理の幅が広がります。

特定の条件でのフィルタリングやデータの加工は、実際のアプリケーションでよく使用される機能です。

これらの技術を組み合わせることで、より複雑なデータ処理を行うことが可能になります。

まとめ

この記事では、Javaを使用してファイルを1行ずつ読み込み、配列に格納する方法について詳しく解説しました。

具体的には、Files.readAllLinesメソッドやBufferedReaderを利用したファイルの読み込み手法、エラーハンドリングの実装、さらにはデータのフィルタリングや加工といった応用例を紹介しました。

これらの技術を活用することで、実際のプログラムにおいてファイル操作を効果的に行うことが可能になりますので、ぜひ実際のプロジェクトで試してみてください。

関連記事

Back to top button