ファイル
ファイル→byte配列
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 ) {
007 008
// 読み込みデータ格納用 byte[] data;
010 011
// Fileクラスのオブジェクトにファイル名を対応
File file = new File( filePath );
013 014
// ファイルの有無を確認
if ( !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 );
028 029
// 読み込んだサイズとファイルサイズを比較
if ( readsize != file.length() )
readsizeとfile.length()を比較して、同じでなければnullを戻しています。
032 033 034 035 036
catch ( IOException e ) { // 読み込みエラー return null; }
例外が発生したらnullを戻しています。
038
return data;
042 043
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
044
byte[] data; // 格納データ
045
String filePath; // ファイル名
047 048 049 050 051 052 053
// 入力した引数が1つ以上かを調べる if ( 1 > args.length ) { // 入力した引数が1つ未満の場合、使用方法を表示する System.out.println( "FiletoByteArray [ファイル名]" ); return; }
055 056
// パラメータをファイル名に代入
filePath = args[ 0 ];
058 059
// ファイルの読み込み
data = readFile( filePath );
061 062 063 064 065
// 結果の出力 if ( null == data ) System.out.println( "ファイルの読み込みに失敗!" ); else System.out.println( "ファイルサイズ(byte) : " + data.length );
以上です。
関連コンテンツ
ファイルは、データを取り扱うとき管理単位の一つで、ハードディスク、SSD,USBメモリ、CD/DVD/ブルーレイなどの記憶媒体に保存するときに使われます。詳しくは、記事をご覧ください。
2022.08.12