

Javaで、バイナリやテキストファイルをStringへ読み込む方法で困っています。

困っている点は、  
ファイルサイズ文、bufのサイズ1024バイトの読込みを繰り返しますが、  
最後は、端数の1024バイト以下になるのですが、  
下記で、読み込んだ内容を連結していくと、  
最後が50バイトでも、1024バイト分の文字を連結してしいます。

bufを読み込む前の空の状態に毎回すればよいかと考えていますが、  
うまくいきません。

どのようにして、バイナリファイルやテキストファイル（どちらでも良いように）を  
Stringへ読み込めばよいでしょうか？

[code]

        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;
        }
    
[/code]

具体例：  
byte buf[] = new byte[5]; だとして示します。

ファイルの内容： "1234567890ab"

読込みループ：  
1回目：  
buf:[12345]  
2回目：  
buf:[67890]  
最後：  
buf:[ab890] ※"890"と前回読み込んだデータが残っている。

本来欲しいのは、最後は、  
buf:[ab]  
です。


CC BY-SA 3.0
2016-09-08T03:33:02.660
28756
2016-09-08T08:07:13.573
2016-09-08T04:05:08.587
17129
17129
question
java
Javaで、バイナリやテキストファイルをStringへ読み込む方法

[code]

    new String(buf, 0, iLength, "UTF-8")
    
[/code]

と指定すれば`byte[]`の`0`バイト目から長さ`iLength`バイトの範囲にあるデータを文字列化できます。


CC BY-SA 3.0
2016-09-08T03:45:11.270
28757
2016-09-08T08:07:13.573
2016-09-08T08:07:13.573
5750
5750
28756
answer