2010-04-10 35 views
1
Scanner s = null; 
    try { 
     s = new Scanner(new BufferedReader(new FileReader("rates.txt"))); 
      for (int i=0; i<9; i++){ 
       while(s.hasNext()){rates[i] = s.next();} 
       System.out.println(rates[i]); 
      } 
    }catch (IOException e){ 
     System.out.println(e); 
    } 
    finally { 
     if (s != null) { 
      s.close(); 
     } 
    } 

當我運行此代碼時,它讀取我的txt文件中的最後一個字符塊,將它們置於rate [0]中,在1-9中保持null。我不確定爲什麼它首先讀取我的文件的末尾。 txt的內容如下..我無法使用FileReader將一個txt文件寫入數組(Java),我在做什麼錯了?

USD 1.34 

EUR 1.00 

JPY 126.28 

GBP 0.88 

INR 60.20 

它讀取60.20,這是它正在記錄在陣列中。任何幫助,將不勝感激。我想我可以給你運行該代碼的結果:

run: 
60.20 
null 
null 
null 
null 
null 
null 
null 
null 
BUILD SUCCESSFUL (total time: 0 seconds) 
+0

你想要怎麼處理文本文件中的數據? – Finbarr 2010-04-10 13:19:35

+0

如何在您的代碼中定義「rates」? – 2010-04-10 13:22:00

回答

3
while(s.hasNext()){rates[i] = s.next();} 

在簡單的英語,這樣說:雖然有留下記號,把下一個標記爲rates[i]

那麼它將把第一個標記爲rates[i],那麼下一個標記爲rates[i],那麼下一個標記爲rates[i],......,最後是最後一個令牌進入rates[i]。由於i未被修改,所有值都被寫入到數組的相同元素中,覆蓋之前讀取的值。

+0

/facepalm 謝謝。 – DeliriumTremens 2010-04-10 13:24:58

+0

+1的確很好找! @deliriumtemns不要忘記接受他的回答:-) – 2010-04-10 13:25:23

0

我認爲問題在於,包含while循環的第5行讀取整個文件輸入。所以你在第一個for循環迭代中讀取你的整個文件,其中i = 0;下一次您的for循環沒有什麼可讀的。

你可能想是這樣的,而不是:

List rates = new ArrayList(); 
while (s.hasNext()) { 
     rates.add(s.next()); 
} 
1

我建議:

  • 使用List代替陣列
    • 更靈活,更容易的工作,需要的優點Java Collections Framework等
  • 將貨幣符號和數值交換率全部保存在一個混合包中
    • ...但使用一個類來封裝對
  • 使用Scanner.nextDouble()讀取數值匯率(這大概你要轉換爲double反正)

所以,這樣的事情:

List<ExchangeRate> allRates = new ArrayList<ExchangeRate>(); 
while (sc.hasNext()) { 
    String symbol = sc.next(); 
    double rate = sc.nextDouble(); 
    allRates.add(new ExchangeRate(symbol, rate)); 
} 

注意如何:

  • 您不再需要知道多少個數組中的元素
  • 的符號和速度分配不都是扔進一個魚龍混雜
  • List.add意味着沒有計數器,你需要跟蹤和管理
    • 即臭蟲你原來的問題!
0

另外一個潛在的問題:FileReader使用平臺默認的編碼。這適用於處理用戶提供的文件,但如果這些文件是應用程序的一部分,那麼當應用程序在默認編碼不兼容的系統上運行時,它們可能會損壞(並且僅使用ASCII字符而不是保護你完全不受此影響)。

爲避免此問題,請使用新的InputStreamReader(new FileInputStream(filename), encoding)來代替 - 並意識到您實際上必須爲您的文件選擇encoding

相關問題