スライドショー

【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

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説