2013-01-05 57 views
0

我的代碼應該讀取文件並將每行(每條記錄)存儲到一個字符串數組中。將文件讀取到字符串數組並顯示每條記錄

我的txt文件是:

FName Lname Number 
second secondsecond 22 
thired thithird 33 
fourth fourfourr 44 
fifth fiffif 55 

但是,當我運行我的代碼,我的程序不顯示每一行的第一個字符! 顯示是這樣的:

econd secondsecond 22 
hired thithird 33 
ourth fourfourr 44 
ifth fiffif 55 

我的代碼:

public class ReadfileIntoArray { 

String[] columns=new String[] {"FName","Lname","Number"}; 
String[] data=new String[100]; 

public void read() throws IOException{ 
FileReader fr=new FileReader("D:\\AllUserRecords.txt"); 
BufferedReader br=new BufferedReader(fr); 
String line; 

while((line=br.readLine())!=null){ 

    for(int i=0;i<=br.read();i++){ 
     data[i]=br.readLine(); 
     System.out.println(data[i]); 
    } 
    } 
br.close(); 
System.out.println("Data length: "+data.length); 
} 

public static void main(String[] args) throws IOException{ 
    ReadfileIntoArray rfta=new ReadfileIntoArray(); 
    rfta.read(); 
} 
} 

,我想看到的數據長度:5(因爲我有五點一線),但我看到100!

(我想爲抽象表模型提供此信息)

謝謝。

回答

1

您的代碼修改:

public class ReadfileIntoArray { 

    String[] columns = new String[] { "FName", "Lname", "Number" }; 
    String[] data = new String[100]; 

    public void read() throws IOException { 
     FileReader fr = new FileReader("D:\\AllUserRecords.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     String line; 

     int i = 0; 
     while ((line = br.readLine()) != null) { 
      data[i] = line; 
      System.out.println(data[i]); 
      i++; 
     } 
     br.close(); 
     // This is for resize the data array (and data.length reflect new size) 
     String[] dataNew = new String[i]; 
     System.arraycopy(data, 0, dataNew, 0, i); 
     data = dataNew; 
     System.out.println("Data length: " + data.length); 
    } 

    public static void main(String[] args) throws IOException { 
     ReadfileIntoArray rfta = new ReadfileIntoArray(); 
     rfta.read(); 
    } 
} 
0

br.read()從每行的開頭讀取一個字符,剩下的部分用br.readLine()讀取。

這個內循環沒什麼意義。

for(int i=0;i<=br.read();i++){ 
    data[i] = br.readLine(); 
    System.out.println(data[i]); 
} 

這應該是你需要的一切。如果您不想要第一行,請在循環前添加對br.readLine()的額外呼叫。

int i = 0; 
while((line=br.readLine())!=null){ 
    data[i] = line; 
    System.out.println(line); 
    i++; 
} 

你也應該嘗試使用dynamicaly大小的數據結構來存儲的字符串(例如ArrayList<String>),如果你不知道有多少行期望。然後您可以使用myList.size()來計算行數。

List myList = new ArrayList<String>(); 
while((line=br.readLine())!=null){ 
    myLine.add(line); 
    System.out.println(line); 
} 

System.out.println(myList.size()); 

//Retrieve the data as a String[]. 
String[] data = (String[]) myList.toArray(); 
+0

我可以使用表模型構建的ArrayList? – user1945649

+0

我不這麼認爲,但是List有'.toArray(...)'。將你的字符串收集到ArrayList中,然後在需要時使用'.toArray(...)'獲取一個String []。 – Mike

+0

非常感謝你! – user1945649

1

data陣列將永遠是100的尺寸,因爲當你比如它(String[] data = new String[100])創建一個具有100個指數空白陣列。您可以使用String[]而不是使用

+0

列表是Arraylist?或者它不同? – user1945649

+0

是的。列表是一個接口。使用這種類型的變量是很好的做法。它可以指向一個ArrayList 對象。 – ncmathsadist

+0

我可以在表模型構造函數中使用ArrayList嗎?怎麼樣? – user1945649

2

因爲您在第二行聲明瞭數組大小爲100。所以,如果基本上有兩個選項,如果文件中的行數不會改變,則將數組的大小聲明爲5.如果要改變,那麼我建議您使用例如ArrayList

List<String> data = new ArrayList<String>(); 
//in the while loop 
data.add(br.readLine()); 
+0

行數將會更多 – user1945649

+0

然後按照我的建議使用ArrayList,它是一個集合,這意味着您不必關心它的大小,它會根據需要更改動態性 –

+0

我可以在表模型構造函數中使用ArrayList嗎?怎麼樣? – user1945649

0

在讀取行的循環內部,使用String方法split來處理每一行。不要從閱讀器中提取,因爲它在讀取文件時將文件指針向前移動。您可以使用空格分割

String [] parts = stringName.split("\\s"); 

然後您可以完全訪問每行中的所有三個項目。

0

爲什麼這麼複雜?下面是 是我的解決方案,供參考。

String line; 
int cnt; 

cnt = 0; 
while((line = br.readLine()) != null){ 
    System.out.println(line); 
    cnt++; 
} 

br.close(); 
System.out.println("Data length: "+cnt); 
相關問題