Javaプログラミング学習サイト ゆるゆるプログラミング

2020/03/23 公開

・ファイル→byte配列

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

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

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

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

FiletoByteArray.java ← クリックしてダウンロードページに移動
001:    import java.io.*;
002:    
003:    public class FiletoByteArray {
004:    	// ファイルをbyte配列に読み込む
005:    	static byte[] readFile( String filePath )
006:    	{
007:    		// 読み込みデータ格納用
008:    		byte[] data;
009:    
010:    		// Fileクラスのオブジェクトにファイル名を対応
011:    		File file = new File( filePath );
012:    
013:    		// ファイルの有無を確認
014:    		if ( !file.exists() ) return null;
015:    
016:    		// ファイルの読み込み
017:    		try
018:    		{
019:    			// ファイルサイズで配列作成
020:    			data = new byte[ (int)file.length() ];
021:    
022:    			// ファイルでInputStream作成
023:    			InputStream is = new FileInputStream( file );
024:    
025:    			// ファイル読み込み
026:    			int readsize = is.read( data );
027:    
028:    			// 読み込んだサイズとファイルサイズを比較
029:    			if ( readsize != file.length() )
030:    				return null;
031:    		}
032:    		catch ( IOException e )
033:    		{
034:    			// 読み込みエラー
035:    			return null;
036:    		}
037:    
038:    		return data;
039:    	}
040:    
041:    
042:    	// メイン
043:    	public static void main( String[] args ) {
044:    		byte[] data;
045:    		String filePath;	// ファイル名
046:    
047:    		// 入力した引数が1つ以上かを調べる
048:    		if ( 1 > args.length ) {
049:    			// 入力した引数が1つ未満の場合、使用方法を表示する
050:    			System.out.println(
051:    				 "FiletoByteArray [ファイル名]" );
052:    			return;
053:    		}
054:    
055:    		// パラメータを検索パスに代入
056:    		filePath = args[ 0 ];
057:    
058:    		// ファイルの読み込み
059:    		data = readFile( filePath );
060:    
061:    		// 結果の出力
062:    		if ( null == data )
063:    			System.out.println( "ファイルの読み込みに失敗!" );
064:    		else
065:    			System.out.println( "ファイルサイズ(byte) : " + data.length );
066:    	}
067:    }

FiletoByteArrayを実行(ファイルが存在する場合)

C:\talavax\javasample>java FiletoByteArray c:\samplepath\sample1.txt

出力結果

ファイルサイズ(byte) : 823

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

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

FiletoByteArrayを実行(ファイルが存在しない場合)

C:\talavax\javasample>java FiletoByteArray c:\samplepath\xxxxx.txt

出力結果

ファイルの読み込みに失敗!

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

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

001:    import java.io.*;

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

003:    public class FiletoByteArray {

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

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

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

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

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

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

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

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

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

File.existsメソッド

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

  パラメータ なし

  戻り値     この抽象パス名が示すファイルが存在するかどうかを判定します。

017:    		try
018:    		{
019:    			// ファイルサイズで配列作成
020:    			data = new byte[ (int)file.length() ];

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

File.lengthメソッド

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

  パラメータ なし

  戻り値     この抽象パス名に指定されているファイルの長さを返します。単位はバイト(byte)

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

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

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

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

FiletoByteArray.java ← クリックしてダウンロードページに移動
001:    import java.io.*;
002:    
003:    public class FiletoByteArray {
004:    	// ファイルをbyte配列に読み込む
005:    	static byte[] readFile( String filePath )
006:    	{
007:    		// 読み込みデータ格納用
008:    		byte[] data;
009:    
010:    		// Fileクラスのオブジェクトにファイル名を対応
011:    		File file = new File( filePath );
012:    
013:    		// ファイルの有無を確認
014:    		if ( !file.exists() ) return null;
015:    
016:    		// ファイルの読み込み
017:    		try
018:    		{
019:    			// ファイルサイズで配列作成
020:    			data = new byte[ (int)file.length() ];
021:    
022:    			// ファイルでInputStream作成
023:    			InputStream is = new FileInputStream( file );
024:    
025:    			// ファイル読み込み
026:    			int readsize = is.read( data );
027:    
028:    			// 読み込んだサイズとファイルサイズを比較
029:    			if ( readsize != file.length() )
030:    				return null;
031:    		}
032:    		catch ( IOException e )
033:    		{
034:    			// 読み込みエラー
035:    			return null;
036:    		}
037:    
038:    		return data;
039:    	}
040:    
041:    
042:    	// メイン
043:    	public static void main( String[] args ) {
044:    		byte[] data;
045:    		String filePath;	// ファイル名
046:    
047:    		// 入力した引数が1つ以上かを調べる
048:    		if ( 1 > args.length ) {
049:    			// 入力した引数が1つ未満の場合、使用方法を表示する
050:    			System.out.println(
051:    				 "FiletoByteArray [ファイル名]" );
052:    			return;
053:    		}
054:    
055:    		// パラメータを検索パスに代入
056:    		filePath = args[ 0 ];
057:    
058:    		// ファイルの読み込み
059:    		data = readFile( filePath );
060:    
061:    		// 結果の出力
062:    		if ( null == data )
063:    			System.out.println( "ファイルの読み込みに失敗!" );
064:    		else
065:    			System.out.println( "ファイルサイズ(byte) : " + data.length );
066:    	}
067:    }
021:    
022:    			// ファイルでInputStream作成
023:    			InputStream is = new FileInputStream( file );
024:    
025:    			// ファイル読み込み
026:    			int readsize = is.read( data );
027:    
028:    			// 読み込んだサイズとファイルサイズを比較
029:    			if ( readsize != file.length() )

existsメソッドファイルの有無を判定し、その結果で処理を分岐しています。

さらに、ファイルを取得する部分をメソッドにしたものは以下のソースコードです。

FileGetSize3.java ← クリックしてダウンロードページに移動
001:    import java.io.File;
002:    
003:    public class FileGetSize3 {
004:    	// ファイルを取得するメソッド
005:    	// 戻り値が0未満の場合、ファイルが存在しない
006:    	static long getFileSize( String filePath )
007:    	{
008:    		// Fileクラスのオブジェクトにファイル名を対応
009:    		File file = new File( filePath );
010:    
011:    		// ファイルの有無を確認
012:    		if ( !file.exists() ) return -1;
013:    
014:    		// ファイルサイズを戻す
015:    		return file.length();
016:    	}
017:    
018:    	// メイン
019:    	public static void main( String[] args ) {
020:    		String filePath;	// ファイル名
021:    
022:    		// 入力した引数が1つ以上かを調べる
023:    		if ( 1 > args.length ) {
024:    			// 入力した引数が1つ未満の場合、使用方法を表示する
025:    			System.out.println(
026:    				 "FileGetSize3 [ファイル名]" );
027:    			return;
028:    		}
029:    
030:    		// パラメータを検索パスに代入
031:    		filePath  = args[ 0 ];
032:    
033:    		// ファイルサイズの取得
034:    		long filesize = getFileSize( filePath );
035:    
036:    		System.out.println( "ファイル名 : " + filePath );
037:    		if ( 0 > filesize )
038:    			System.out.println( "ファイルサイズの取得に失敗!" );
039:    		else
040:    			System.out.println( "ファイルサイズ(byte) : " + filesize );
041:    	}
042:    }

以下は、ファイルを取得するメソッドだけを抜き出したものです。

004:    	// ファイルを取得するメソッド
005:    	// 戻り値が0未満の場合、ファイルが存在しない
006:    	static long getFileSize( String filePath )
007:    	{
008:    		// Fileクラスのオブジェクトにファイル名を対応
009:    		File file = new File( filePath );
010:    
011:    		// ファイルの有無を確認
012:    		if ( !file.exists() ) return -1;
013:    
014:    		// ファイルサイズを戻す
015:    		return file.length();
016:    	}

このgetFileSizeメソッドファイル名を渡すと、ファイルサイズがバイト単位で返ってきます。指定したファイルが存在しない場合、-1を返すようにしています。

以上です。

■関連コンテンツ

ファイル ファイルの形式の解説
ファイルの有無を判定 ファイルの有無の判定について解説
値のコンソール表示 print()、println()とは?
メモリ容量の取得 Java仮想マシンのメモリ容量の取得方法を解説
ドライブの容量の取得 ドライブの空きは?
メソッド メソッドについて解説
条件による処理の分岐に使用するif文について解説-画像

if文

条件による処理の分岐に使用するif文について解説

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

 

 

 

 

 

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/6/18 14:32時点)
感想(6件)

 

 

 

 

Topへ