ファイル

ファイル→byte配列

指定したファイルの内容をバイト(byte)配列に格納する方法を紹介します。

ここでは、FileInputStreamクラスを使ってバイト配列に格納します。

Javaソースコード

それでは、ファイルバイト配列に格納するJavaソースコードを見ていきましょう。

このプログラムは、ファイルの内容をバイト配列に読み込んで、その配列要素数を出力するものです。バイト配列の値は出力しません。

FiletoByteArray.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
import java.io.*;

public class FiletoByteArray {
	// ファイルをbyte配列に読み込む
	static byte[] readFile( String filePath )
	{
		// 読み込みデータ格納用
		byte[] data;

		// Fileクラスのオブジェクトにファイル名を対応
		File file = new File( filePath );

		// ファイルの有無を確認
		if ( !file.exists() ) return null;

		// ファイルの読み込み
		try
		{
			// ファイルサイズで配列作成
			data = new byte[  (int)file.length() ];

			// ファイルでInputStream作成
			InputStream is = new FileInputStream( file );

			// ファイル読み込み
			int readsize = is.read( data );

			// 読み込んだサイズとファイルサイズを比較
			if ( readsize != file.length() )
				return null;
		}
		catch ( IOException e )
		{
			// 読み込みエラー
			return null;
		}

		return data;
	}


	// メイン
	public static void main( String[] args ) {
		byte[] data;		// 格納データ
		String filePath;	// ファイル名

		// 入力した引数が1つ以上かを調べる
		if ( 1 > args.length ) {
			// 入力した引数が1つ未満の場合、使用方法を表示する
			System.out.println(
				 "FiletoByteArray [ファイル名]" );
			return;
		}

		// パラメータをファイル名に代入
		filePath = args[ 0 ];

		// ファイルの読み込み
		data = readFile( filePath );

		// 結果の出力
		if ( null == data )
			System.out.println( "ファイルの読み込みに失敗!" );
		else
			System.out.println( "ファイルサイズ(byte) : " + data.length );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis FiletoByteArray.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac FiletoByteArray.java

実行例(指定したファイルが存在する場合)

C:\talavax\javasample>java FiletoByteArray c:\samplepath\sample1.txt
ファイルサイズ(byte) : 823

指定したファイルが存在する場合、ファイルサイズが出力されます。

次に指定したファイルが存在しない場合の結果をみていきましょう。

実行例(指定したファイルが存在しない場合)

C:\talavax\javasample>java FiletoByteArray c:\samplepath\xxxxx.txt
ファイルの読み込みに失敗!

指定したファイルが存在しない場合、「ファイルの読み込みに失敗!」というメッセージが出力されます。

Javaソースコードの解説

ここからは、このソースコードを上から順番に解説していきます。

001
import java.io.*;

Javaクラスライブラリの中から「java.io.*」というパッケージにあるクラスを、このプログラム内で使うために記述します。 この記述により、FileクラスInputStreamクラスInputFileStreamクラスIOExceptionクラスが利用できるようになります。

003
public class FiletoByteArray {

クラス名を、FiletoByteArrayとしています。

004
005
006
	// ファイルをbyte配列に読み込む
	static byte[] readFile( String filePath )
	{

指定したファイルbyte型配列に格納して戻すメソッドです。格納に失敗した場合、nullを戻します。

007
008
		// 読み込みデータ格納用
		byte[] data;

読み込むファイルの内容を格納するbyte配列dataを宣言しています。

010
011
		// Fileクラスのオブジェクトにファイル名を対応
		File file = new File( filePath );

Fileクラスコンストラクタで、読み込むファイル名を指定しています。

013
014
		// ファイルの有無を確認
		if ( !file.exists() ) return null;

Fileクラスexistsメソッドファイルの有無を判定し、ファイルが存在しなければreturn文nullを戻してメソッドを終了します。

File.existsメソッド

public boolean exists()
・ファイルが存在するかどうかを判定

  パラメータ なし

  戻り値     この抽象パス名が示すファイルが存在するかどうかを判定します。
017
018
019
020
		try
		{
			// ファイルサイズで配列作成
			data = new byte[  (int)file.length() ];

ファイルサイズをFileクラスのlength()メソッドで取得し、その値を要素数としたbyte型配列dataを作成しています。配列要素数(int)file.length() としているのは、配列要素数long型の値を指定できないためです。そのためlength()メソッド戻り値int型型キャストしています。

File.lengthメソッド

public long length()
・ファイルサイズの取得

  パラメータ なし

  戻り値     この抽象パス名に指定されているファイルの長さを返します。単位はバイト(byte)
022
023
			// ファイルでInputStream作成
			InputStream is = new FileInputStream( file );

fileからInputStreamを作成しています。

025
026
			// ファイル読み込み
			int readsize = is.read( data );

InputStreamクラスisにbyte型配列を渡すと、その配列に値が格納されます。戻り値readsizeには、読み込んだデータのサイズが代入されます。

028
029
			// 読み込んだサイズとファイルサイズを比較
			if ( readsize != file.length() )

readsizeとfile.length()を比較して、同じでなければnullを戻しています。

032
033
034
035
036
		catch ( IOException e )
		{
			// 読み込みエラー
			return null;
		}

例外が発生したらnullを戻しています。

038
		return data;

エラーが無い場合、return文で読み込んだbyte配列dataを戻しています。

042
043
	// メイン
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

044
		byte[] data;		// 格納データ

ファイルを読み込んだデータを格納するint型配列dataを宣言しています。

045
		String filePath;	// ファイル名

ファイル名を格納するString型の変数filePathを宣言しています。

047
048
049
050
051
052
053
		// 入力した引数が1つ以上かを調べる
		if ( 1 > args.length ) {
			// 入力した引数が1つ未満の場合、使用方法を表示する
			System.out.println(
				 "FiletoByteArray [ファイル名]" );
			return;
		}

1つ以上の引数が与えられたかをチェックし、1つ未満の場合に、使い方のメッセージを表示し、returnによってmainメソッドを抜けています。

055
056
		// パラメータをファイル名に代入
		filePath = args[ 0 ];

与えられた引数ファイル名を格納する変数filePathに代入していいます。

058
059
		// ファイルの読み込み
		data = readFile( filePath );

readFileメソッドファイル名filePathを渡して配列byteに格納します。

061
062
063
064
065
		// 結果の出力
		if ( null == data )
			System.out.println( "ファイルの読み込みに失敗!" );
		else
			System.out.println( "ファイルサイズ(byte) : " + data.length );

dataがnullの場合はエラーなので"ファイルの読み込みに失敗!"をコンソール出力します。

dataがnullでない場合は、ファイルの読み込みに成功しているので配列dataにデータが格納されています。

data.lengthをファイルサイズとしてコンソール出力します。

以上です。

関連コンテンツ

ファイルは、データを取り扱うとき管理単位の一つで、ハードディスク、SSD,USBメモリ、CD/DVD/ブルーレイなどの記憶媒体に保存するときに使われます。詳しくは、記事をご覧ください。

2022.08.12

コンピュータに保存されたファイルを特定するための名前がファイル名です。その付け方は?

2016.11.23

指定したフォルダに格納されているファイル名を配列に格納する方法を説明しています。

2016.11.23

指定したファイルが存在するかを判定する方法を説明しています。

2016.11.23

指定したファイルのサイズ(byte)を取得する方法を説明しています。

2021.04.02

フォルダー(folder)の意味を説明しています。

2022.08.14

プログラミング、ITに関する用語をまとめています。

2022.10.17

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

コンピュータで扱う情報の量を表す単位って何?メモリ、HDD(ハードディスク)、SSDなどデータを格納する機器の仕様に書いている記号GB,TBとは?

2020.10.12

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

データの型を変換する方法を詳しく解説しています。例)int型 → long型

2015.11.01

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

広告