質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

JAVA基本 BufferedReader、FileReader、readLineの解説依頼

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,046

前提・実現したいこと

①BufferedReader、FileReader、readLineの意味、使い所が分からないです。
②なぜString str_id= array[0];
String str_pw= array[1];
で以下の出力結果になるのかが分からないです。
③while ((s = br.readLine())!=null)の意味が分からないです。

初心者なので、出来れば丁寧に解説して下さると幸いです。

該当のソースコード

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
String s;
try{
BufferedReader br = new BufferedReader(
new FileReader("D:/javaide_ws_asou/WITC_SI_KENSHU_5TH/src/exercise_variable/testauth.csv"));

System.out.println(br);
while ((s = br.readLine())!=null){
//カンマで分割したString配列を得る

String array[] = 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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

① それぞれが果たす役割が異なっています。
FileReader はその名前の通り「ファイルから読み取る」ためのクラスです。が、このクラスはとってもシンプルなので、使い勝手が少々悪いのです。簡単に言ってしまえば料理の味付けで醤油を大匙で数杯必要なのに、1滴ずつぽたぽた入れているようなものです。
これではしょうもないので、ある程度のデータをまとめて扱うためにバッファリングという方法があります。大匙がこれですね。大匙一杯分という形でまとめて扱います。これが BufferedReader です。
そしてファイルとしてみた場合、使いやすいのは行単位ですから、BufferedReader の中でさらに「1行分」という小分けに取り出す方法が用意されています。これが readLine です。もしこれがないと、1文字ずつ取り出して改行を示す文字がくるまでを調べてやらねばなりません。

② これは string.split を理解しないと意味が分からないですね。
split は「指定された文字を区切り文字として、文字列を分割する」ものです。
元のファイルが CSV(Comma Separated Values)ですから、「,」で項目を区切っています。ですから split することで1行に含まれるそれぞれの項目ごとに分割しています。
split は戻り値として string[] を返しますから、結果として分割された文字列の最初の項目([0])、次の項目([1])を取り出しているのです。

③ 一つ一つ分解しましょう。

while (
 (s = br.readLine())
    != null) {
...
}


まず、br.readLine() は1行読み込みです。その読み込んだ内容を s という変数に代入しています。そして readLine() は読み込むことができなかったとき(もう読み込む行がないとき)、null を返します。
そして、( s = br.readLine() ) という代入式全体の評価として、s の値が使用されますから、もし読み込む行がないと、この部分が null になります。
ということは、while ( null != null ) という判断になるので、これは不成立、すなわち while ループが終了します。
結果、この while ループは読み込む行がなくなるまで続く、というわけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/29 14:24

    丁寧な解答、ありがとうございます。
    string.splitについてですが、s.split(",")をやったら「,」はなくなってしまうんですが?

    キャンセル

  • 2017/05/29 14:30

    そうです。区切り文字なのですから、含まれません。

    キャンセル

0

①と③はここに書いてあります。
【参考URL】
https://www.javadrive.jp/start/stream/index3.html

②については読み込んだファイルにどのようなことが書かれているかわかりませんが、
出力結果から予想すると
sy_root,sy_pw 
ge_root,ge_pw 
ge_test1,1234 
ge_test2,1234 
ge_test3,1234

と書かれているのだと思われます。
これを1行ずつ読み出し、読みだした行がある限り繰り返し
Stringのarray[]という配列を用意して、split関数でカンマ区切りで配列に格納し、
その後str_idとstr_pwに入れなおして表示させているだけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る