[英]Java BufferedReader to String Array
我在這里檢查了很多關於stackoverflow的不同主題,但到目前為止找不到任何有用的東西:/
所以這是我的問題。 我正在寫文件復印機。 在讀取文件時已經出現問題。 我的測試文檔有3行隨機文本。 所有這三行都應寫入字符串數組中。 問題是只有textdocument的第二行被寫入數組,而我不知道為什么。 已經調試過了,但是沒有進一步了解我。
我知道對於具有不同類的文件復印機有不同的解決方案。但是我真的很想讓它與我在這里使用的類一起運行。
String[] array = new String[5];
String datei = "test.txt";
public String[] readfile() throws FileNotFoundException {
FileReader fr = new FileReader(datei);
BufferedReader bf = new BufferedReader(fr);
try {
int i=0;
//String Zeile = bf.readLine();
while(bf.readLine() != null){
array[i] = bf.readLine();
// System.out.println(array[i]); This line is for testing
i++;
}
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
return array;
對於循環的每次迭代,您都要調用readLine()
兩次,從而丟棄其他所有行。 您需要捕獲每次對readLine()
調用返回的值,因為每個readLine()
調用都會提高讀取器在文件中的位置。
這是慣用的解決方案:
String line;
while((line = bf.readLine()) != null){
array[i] = line;
i++;
}
在這里您讀了兩行:
while(bf.readLine() != null){
array[i] = bf.readLine();
// System.out.println(array[i]); This line is for testing
i++;
}
您必須將代碼更改為:
String line = null;
while((line =bf.readLine()) != null){
array[i] = line;
// System.out.println(array[i]); This line is for testing
i++;
}
問題在這里:
while(bf.readLine() != null)
readLine()
讀取一行並在移至下一行的同時返回同一行。
因此,不僅要檢查返回的值是否為null
還要存儲它。
String txt = null;
while((txt = bf.readLine()) != null)
array[i++] = txt;
我認為是因為您兩次調用readLine()。 第一次循環,然后第二次將其放入數組。 因此,它在循環的開頭(第1行)讀取一行,然后在循環中讀取第一行代碼(您看到的第2行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.