Javaで、バイナリやテキストファイルをStringへ読み込む方法
Javaで、バイナリやテキストファイルをStringへ読み込む方法で困っています。
困っている点は、
ファイルサイズ文、bufのサイズ1024バイトの読込みを繰り返しますが、
最後は、端数の1024バイト以下になるのですが、
下記で、読み込んだ内容を連結していくと、
最後が50バイトでも、1024バイト分の文字を連結してしいます。
bufを読み込む前の空の状態に毎回すればよいかと考えていますが、
うまくいきません。
どのようにして、バイナリファイルやテキストファイル(どちらでも良いように)を
Stringへ読み込めばよいでしょうか?
public String read_file(String strFile_name)
{
System.out.println("read_file() : strFile_name=[" + strFile_name + "]");
try {
String strRead_data = "";
byte buf[] = new byte[1024];
int iLengh = 0;
FileInputStream input = new FileInputStream(strFile_name);
while((iLengh = input.read(buf)) != -1){
// ↓この処理だとインデックスオーバーで落ちる
// strRead_data += new String(buf, "UTF-8").substring(0, iLengh);
String strBuf = new String(buf, "UTF-8");
System.out.println("iLengh=[" + iLengh + "]");
System.out.println("strBuf=[" + strBuf + "]");
strRead_data += strBuf; // 今回50バイトのみ読み込んでも、50バイトの後ろに、この直前に読み込んだ1024-50バイトのデータが追加される。
// これでやると、インデックスオーバーの例外となる
// strRead_data += strBuf.substring(0, iLengh);
// bufを空にしてみたが?? Arrays.fill(buf, (byte)0);
}
input.close();
return strRead_data;
}
catch(Exception e) {
e.printStackTrace();
}
return null;
}
具体例:
byte buf[] = new byte[5]; だとして示します。
ファイルの内容: "1234567890ab"
読込みループ:
1回目:
buf:[12345]
2回目:
buf:[67890]
最後:
buf:[ab890] ※"890"と前回読み込んだデータが残っている。
本来欲しいのは、最後は、
buf:[ab]
です。