回答編集履歴

2

質問に対する回答追記2

2017/05/31 08:18

投稿

motuo
motuo

スコア3027

test CHANGED
@@ -83,3 +83,27 @@
83
83
  br.close();
84
84
 
85
85
  ```
86
+
87
+ # 追記2
88
+
89
+ arrayはwhileの内部で宣言されている為、2回目のループではスコープから外れてデータは消えてしまいます。
90
+
91
+ データの遷移です。
92
+
93
+ > 1回目のループではデータがセットされていない。
94
+
95
+ ![イメージ説明](adc47f3a815927577afd5112d5514159.png)
96
+
97
+ > 次のステップで配列が設定された
98
+
99
+ ![イメージ説明](6feec3b3ad213e6d9e11ce5e8720d834.png)
100
+
101
+ > 2回目のループに入った時にはスコープから外れたので、Arrayには何も設定されていない状態![イメージ説明](9452ba795b85b05c972307fec768fa8e.png)
102
+
103
+
104
+
105
+ となります。
106
+
107
+ なので、イメージとしては1回目のループで使用したarray配列は破棄され、2回目に作り直したarray配列にデータを入れ直す処理となっています。
108
+
109
+

1

コメントの追加質問への回答を追記

2017/05/31 08:18

投稿

motuo
motuo

スコア3027

test CHANGED
@@ -35,3 +35,51 @@
35
35
 
36
36
 
37
37
  なので、2回目(=2行目)のループでもarray[0]とarray[1]にそれぞれの要素が入ることになるのです。
38
+
39
+
40
+
41
+ # 追記
42
+
43
+ readLineではbufferedReaderが消えるわけではありません。
44
+
45
+ その証拠に、下記の様にmarkとresetを使うと再び、データを先頭より取得し直すことも可能です。
46
+
47
+ ```java
48
+
49
+ br.mark(1024); //ここで最初の行をmark
50
+
51
+
52
+
53
+ while ((s = br.readLine()) != null) {
54
+
55
+
56
+
57
+ String[] array = s.split(",");
58
+
59
+ String str_id = array[0];
60
+
61
+ String str_pw = array[1];
62
+
63
+
64
+
65
+ }
66
+
67
+ br.reset();//mark位置までreset
68
+
69
+ while ((s = br.readLine()) != null) {
70
+
71
+ //ここでも上のループと同じようにsy_rootから始まるデータを取ることができる。
72
+
73
+ String[] array = s.split(",");
74
+
75
+ String str_id = array[0];
76
+
77
+ String str_pw = array[1];
78
+
79
+
80
+
81
+ }
82
+
83
+ br.close();
84
+
85
+ ```