【Java】FileOutputStreamでファイルに書き込む

Javaでバイト単位のデータをファイルに書き込みたい
FileOutputStreamクラスでファイルに書き込む方法を知りたい

javaでファイルに書き込むにはFileOutputStreamクラス、OutputStreamクラスを使用します。

ここでは、ファイルに書き込む処理について、以下の内容で解説していきます。

  • 【基礎】FileOutputStreamクラスとは
  • 【基礎】FileOutputStreamの基本的な使い方
  • 【発展】ファイルに追記する方法
  • 【発展】FileOutputStreamの注意点と回避策

今回はそんなFileOutputStreamクラスについて、さまざまな使い方をわかりやすく解説します!

FileOutputStreamとは

FileOutputStreamクラスとは、ファイルにバイト単位のデータを書き込むときに使用する出力ストリームです。

FileOutputStreamクラスは以下のように記述します。

FileOutputStream file = new FileOutputStream("パス/ファイル名”);

FileOutputStreamを使用するためには、「java.io」のパッケージをインポートする必要があります。

import java.io.FileOutputStream;

また、OutputStreamクラスは、バイトでファイルに出力するFileOutputStreamクラスのスーパークラスです。

ファイルに書き込むためのwriteメソッドなどは、OutputStreamクラスで用意されているメソッドですが、FileOutputStreamクラスはOutputStreamクラスを継承しているため使用することができます。

FileOutputStreamの使い方

ファイルに書き込む方法

以下にFileOutputStreamクラスを使用して、ファイルに書き込む方法を記述します。

import java.io.FileOutputStream;
import java.io.IOException;
 
public class Main {
	public static void main(String[] args) throws IOException {
		
		//FileOutputStreamクラスのオブジェクトを生成する
		FileOutputStream fos = 
				new FileOutputStream("/Users/Shared/java/java.txt");
		
		byte b1 = 74; //ASCII:(J)
		byte b2 = 65; //ASCII:(A)
		byte b3 = 86; //ASCII:(V)
		byte b4 = 65; //ASCII:(A)
		
		fos.write(b1);
		fos.write(b2);
		fos.write(b3);
		fos.write(b4);
		
		//ファイルに書き込む
		fos.flush();
		
		//ファイルをクローズする
		fos.close();
 
	}
}

サンプルでは、FileOutputStreamクラスのオブジェクトを、ファイル/パスを指定して生成しています。

次にFileOutputStreamのwriteメソッドを使用して、書き込むデータをバッファに保存しています。

最後にcloseメソッドでファイル操作のリソースを開放します。

FileOutputStreamクラス単体では、byte型のデータの書き込みのみで、文字列をファイルに書き込むことはできません。

文字列をファイルに書き込みたい場合は、以下のプログラムのようにバイト型の配列として返すgetBytesを使用する方法があります。

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
 
public class Main {
	public static void main(String[] args) throws IOException {
		
		//FileOutputStreamクラスのオブジェクトを生成する
		FileOutputStream fos = 
				new FileOutputStream("/Users/Shared/java/java.txt");
		
		byte sbyte[] = "Java".getBytes(StandardCharsets.UTF_8);
		
		for(int i = 0; i < sbyte.length; i++){
			fos.write(sbyte[i]);
		}
		
		//ファイルに書き込む
		fos.flush();
		
		//ファイルをクローズする
		fos.close();
 
	}
}

getBytesについては、以下の記事で詳しく解説しています。

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

ファイルに追加で書き込みたい場合は、FileOutputStreamクラスのオブジェクト生成時に、第2引数にtrueを指定します。

FileOutputStream file = new FileOutputStream("パス/ファイル名", true);

さきほど紹介した、サンプルのFileOutputStreamクラスのオブジェクト生成時の処理を、以下のように変更すれば指定したファイルにデータが追記されます。

//FileOutputStreamクラスのオブジェクトを生成する
FileOutputStream fos = 
	new FileOutputStream("/Users/Shared/java/java.txt", true);

ファイルに書き込むときの注意点

FileOutputStreamクラスに限らず、ファイル関連のクラスで存在しないパス/ファイル名を指定すると、FileNotFoundExceptionの例外が発生してしまいます。

そのため、事前にパス/ファイル名が正しいか確認する場合はFileクラスのexistsメソッドを使用して、ファイルが存在するか確認する必要があります。

FileOutputStreamクラスは、オブジェクト生成時に引数にFileクラスのオブジェクトを指定できます。

ファイルの存在が確認できたら引数に、Fileクラスのオブジェクトを指定すれば、ファイルへの書き込みが可能となります。

FileOutputStream fos = new FileOutputStream(File);

以下にファイルが存在するか、チェック処理を追加したファイルの書き込み方法を記述します。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Main {
	
	public static void main(String[] args) throws IOException {
		
		//ファイルクラスのオブジェクトを生成する
		File file = new File("/Users/Shared/java/java.txt");
		
		//ファイルの存在有無を確認
		if (file.exists()){
			FileOutputStream fos = new FileOutputStream(file);
			
			//〜書き込み処理〜
		}
		else{
			System.out.println(file.toString() + "が存在しません");
		}
	 }
}

また、FileNotFoundExceptionの例外は、ファイルが読み取り専用などで、アクセスができなかった場合にも同様の例外が発生しますので注意が必要です。

ファイルの存在を確認する方法は、以下の記事で詳しく解説しています!

FileWriterクラスを使って文字列を書き込む方法

バイトのデータではなく、文字列を書き込むにはFileWriterクラスを使います。

FileWriterクラスを使って文字列を書き込む方法については、こちらの記事で詳しく解説しているのでぜひ確認してください。

まとめ

ここではFileOutputStreamクラスについて、意味や基本的な使い方の説明、ファイルに追記する方法や注意点についても説明しました。

Javaでファイル操作系のクラスは、さまざまな種類が存在しますので、クラスごとに役割はしっかりと把握しておきましょう。

もし、FileOutputStreamクラスの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。