質問: s.split(","); String str_id= array[0]; String str_pw= array[1]; //内容を入力する System.out.println("|"+str_id+ "|"+str_pw+"|"); } br.close(); }catch (IOException e){ System.out.println("出力先エラーがありました"); } } } ### 出力結果 |sy_root|sy_pw| |ge_root|ge_pw| |ge_test1|1234| |ge_test2|1234| |ge_test3|1234| ### 補足情報(言語/FW/ツール等のバージョンなど) JAVA1.6 eclipse
回答: 1 それぞれが果たす役割が異なっています。 FileReader はその名前の通り「ファイルから読み取る」ためのクラスです。が、このクラスはとってもシンプルなので、使い勝手が少々悪いのです。簡単に言ってしまえば料理の味付けで醤油を大匙で数杯必要なのに、1滴ずつぽたぽた入れているようなものです。 これではしょうもないので、ある程度のデータをまとめて扱うためにバッファリングという方法があります。大匙がこれですね。大匙一杯分という形でまとめて扱います。これが BufferedReader です。 そしてファイルとしてみた場合、使いやすいのは行単位ですから、BufferedReader の中でさらに「1行分」という小分けに取り出す方法が用意されています。これが readLine です。もしこれがないと、1文字ずつ取り出して改行を示す文字がくるまでを調べてやらねばなりません。 2 これは string.split を理解しないと意味が分からないですね。 split は「指定された文字を区切り文字として、文字列を分割する」ものです。 元のファイルが CSV(Comma Separated Values)ですから、「,」で項目を区切っています。ですから split することで1行に含まれるそれぞれの項目ごとに分割しています。 split は戻り値として string[] を返しますから、結果として分割された文字列の最初の項目([0])、次の項目([1])を取り出しているのです。 3 一つ一つ分解しましょう。 ``` while ( (s = br.readLine()) != null) { ... } ``` まず、br.readLine() は1行読み込みです。その読み込んだ内容を s という変数に代入しています。そして readLine() は読み込むことができなかったとき(もう読み込む行がないとき)、null を返します。 そして、( s = br.readLine() ) という代入式全体の評価として、s の値が使用されますから、もし読み込む行がないと、この部分が null になります。 ということは、while ( null != null ) という判断になるので、これは不成立、すなわち while ループが終了します。 結果、この while ループは**読み込む行がなくなるまで**続く、というわけです。