Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】File・FileReader・FileWriterクラスでファイル操作をマスターしよう

Javaでプログラムを開発していると、ファイルを扱いたい場面は数多くあります。例えば、プログラムの出力結果をファイルに保存したい場合や、ファイルからデータを読み込んで処理を行いたい場合などが挙げられます。

こうしたファイル操作を実現するのがjava.ioライブラリです。java.ioライブラリには、Javaでファイルを操作するためのさまざまなクラスやメソッドが用意されています。

この記事では、JavaのFileクラスFileReaderクラスFileWriterクラスの使い方と、それぞれの主要なメソッドについて解説します。さらに、実際のコード例を交えながら、それぞれのメソッドを自分のプログラムで活用する方法を紹介します。

Javaにおけるファイルとディレクトリの基礎知識

ファイルとは、コンピュータ上で特定の情報を保存するためのものです。例えば、数学クラスの学生名簿や、コーヒーケーキを焼くための材料リストなどをファイルに保存できます。一方、ディレクトリ(フォルダ)は、ファイルや他のディレクトリをまとめて管理するためのものです。

java.ioライブラリには、Javaでファイルやディレクトリを操作するためのパッケージが多数含まれています。この記事では、その中でも特に重要なFile、FileReader、FileWriterの3つのクラスに焦点を当てて解説していきます。

これらのクラスは外部パッケージに属しているため、コード内で使用する前に、まずインポートを行う必要があります。

File、FileReader、FileWriterクラスをプログラムにインポートするには、以下のコードを使用します。

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

これで、この記事で扱うJavaのファイル操作クラスをインポートする方法がわかりました。それでは、具体的な使い方を見ていきましょう。

Javaでファイルを作成する方法

JavaのFileクラスは、空のファイルを作成するために使用します。

ファイルを作成する前に、まずFileオブジェクトを作成する必要があります。Fileオブジェクトは、コード内で特定のファイルやフォルダを表すものです。ただし、Fileオブジェクトを作成しただけではファイルは生成されません。まずFileオブジェクトを作成し、それを使って実際のファイルを作成するという流れになります。

JavaでFileオブジェクトを作成するための構文は以下の通りです。

File fileName = new File(String filePath);

この例では、fileNameという名前のファイルオブジェクトを作成しています。このファイルオブジェクトは、filePath変数で指定したパスに保存されているファイルやフォルダに関連付けられます。

Javaで実際にファイルを作成するには、createNewFile()メソッドを使用します。createNewFile()メソッドは、指定したパスに新しいファイルを作成します。このメソッドは、新しいファイルが作成されるとtrueを返し、指定した場所にすでにファイルが存在する場合はfalseを返します。

createNewFile()メソッドの使用例

ここでは、2019年のS&P 500(米国株価指数)の過去のパフォーマンスを分析するデータ分析プログラムを作成する例を考えてみましょう。データを分析する前に、プログラムが生成する分析結果を保存するための新しいファイルを作成したいとします。以下のコードで、分析結果を保存するファイルを作成できます。

import java.io.File;

class CreateFile {
	public static void main(String[] args) {
		File resultsFile = new File("/home/data_analysis/2019sandp500/result.txt");

		boolean fileCreated = resultsFile.createNewFile();
		if (fileCreated) {
			System.out.println("The results file has been created.");
		} else {
			System.out.println("The results file already exists.");
		}
	}
}

このコードを実行すると、/home/data_analysis/2019sandp500/result.txtというパスにファイルが作成され、コンソールには以下のメッセージが表示されます。

The results file has been created.

一方、作成しようとしたファイルがすでに存在する場合は、次のメッセージが表示されます。

The results file already exists.

コードの解説

それでは、コードの内容を詳しく見ていきましょう。

まず、java.io.Fileをインポートします。これにより、コード内でファイル操作用のメソッドが使えるようになります。次に、プログラムのコードを格納するCreateFileクラスを作成します。

mainメソッドの最初の行では、resultsFileという名前のFileオブジェクトを作成しています。このオブジェクトは、/home/data_analysis/2019sandp500/result.txtというパスのファイルを表します。続いて、createNewFile()メソッドを使って、指定したパスに新しいファイルを作成します。createNewFile()メソッドの真偽値(boolean)の結果は、fileCreated変数に格納されます。

その後、if文で条件分岐を行います。fileCreatedtrueであれば「The results file has been created.」がコンソールに表示され、そうでなければ「The results file already exists.」が表示されます。この例では結果ファイルが存在しなかったため、新しいファイルが作成され、「The results file has been created.」がコンソールに出力されました。

Javaでファイルを読み込む方法

JavaのFileReaderクラスread()メソッドは、ファイルの内容を読み込むために使用します。

read()メソッドの使用例

例えば、/home/data_analysis/2019sandp500/raw_message.txtというファイルをコード内で読み込みたいとしましょう。このファイルには、次のテキストが保存されています。

JAVA S&P 500 ANALYSIS PROGRAM

このファイルは、以下のコードで読み込むことができます。

import java.io.FileReader;

class Main {
	public static void main(String[] args) {
		char[] array = new char[100];
		try {
		FileReader fileContents = new FileReader("/home/data_analysis/2019sandp500/raw_message.txt");

		fileContents.read(array);
		System.out.println(array);

		fileContents.close();
		} catch(Exception error) {
			error.getStackTrace();
		}
	}
}

このコードを実行すると、次の出力が得られます。

JAVA S&P 500 ANALYSIS PROGRAM

コードの解説

このプログラムでは、FileReaderクラスを使用して、/home/data_analysis/2019sandp500/raw_message.txtに保存されているファイルの内容を表すファイルオブジェクトを作成しました。次に、read()メソッドを使ってファイルの内容を配列に読み込みます。最後に、配列の内容をコンソールに出力し、close()メソッドでファイルを閉じています。

なお、ファイル操作では例外が発生する可能性があるため、try-catchブロックで例外処理を行っている点にも注目してください。

Javaでファイルに書き込む方法

FileWriterクラスwrite()メソッドは、Javaでファイルにデータを書き込むために使用します。

write()メソッドの使用例

例えば、データ分析プログラムの結果を保存するファイルの先頭に今日の日付を書き込みたいとします。このファイルは/home/data_analysis/2019sandp500/results.txtというパスに保存されています。以下のコードで書き込みが可能です。

import java.io.FileWriter;

class Main {
	public static void main(String args[]) {
		String date = "Thursday, March 12th";
		try {
			FileWriter writeToFile = new FileWriter("/home/data_analysis/2019sandp500/results.txt");

			writeToFile.write(date);
			
			writeToFile.close();
			System.out.println("The date has been written to the file.");

		} catch (Exception error) {
			error.getStackTrace();
		}
	}
}

このコードを実行すると、Thursday, March 12thという文字列が/home/data_analysis/2019sandp500/results.txtファイルに書き込まれ、コンソールには次のメッセージが表示されます。

The date has been written to the file.

プログラムで書き込んだ後のresults.txtファイルの内容は以下の通りです。

Thursday, March 12th

コードの解説

上記の例では、FileWriterクラスを使用して、Javaでファイルに文字列を書き込みました。まず、writeToFileというFileWriterオブジェクトを宣言し、/home/data_analysis/2019sandp500/results.txtのパスに保存されているファイルを表します。次に、write()メソッドで文字列をファイルに書き込み、最後にclose()メソッドでファイルを閉じています。

ファイルへの書き込みが完了したら、必ずclose()メソッドを呼び出してファイルを閉じることが重要です。これにより、データが確実にファイルに保存され、リソースのリークを防ぐことができます。

Javaでファイルを削除する方法

JavaのFileクラスには、ファイルやディレクトリを削除するためのdelete()メソッドが用意されています。

delete()メソッドは、指定したファイルが正常に削除されるとtrueを返し、ファイルが存在しない場合はfalseを返します。また、delete()メソッドで削除できるディレクトリは、中身が空のディレクトリのみである点に注意が必要です。

delete()メソッドの使用例

例えば、プログラムの開始時にresults.txtファイルを削除し、後で新しいデータを書き込めるようにしたいとします。以下のコードで実現できます。

import java.io.File;

class Main {
	public static void main(String[] args) {
		File results = new File("/home/data_analysis/2019sandp500/results.txt");

		boolean deleteFile = results.delete();
		if (deleteFile) {
			System.out.println("results.txt has been deleted.");
		} else {
			System.out.println("results.txt has not been deleted.");
		}
	}
}

このコードを実行すると、results.txtファイルが削除され、コンソールには以下のメッセージが表示されます。

results.txt has been deleted.

コードの解説

この例では、results.txtファイルを表すresultsというFileオブジェクトを作成しました。次に、delete()メソッドを使用してファイルを削除しています。

results.txtファイルが正常に削除された場合(上記の例のように)は、「results.txt has been deleted.」がコンソールに表示されます。削除に失敗した場合は、「results.txt has not been deleted.」が表示されます。

まとめ

Javaのファイル操作について、以下の3つのクラスを解説しました。

  • Fileクラス:ファイルの作成・削除を行う
  • FileReaderクラス:ファイルの内容を読み込む
  • FileWriterクラス:ファイルにデータを書き込む

この記事では、実際のコード例を交えながら、File、FileReader、FileWriterの各クラスを使ってJavaでファイルを操作する方法を紹介しました。これで、あなたもプロのプログラマーのように、Javaでファイルを自在に扱えるようになったはずです。ぜひ実際のプロジェクトで活用してみてください。

  1. JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順

    CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各

  2. Javaでプロパティファイルからデータを読み取る方法を解説

    JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー