2010-05-20 295 views
0

你好老鄉的java開發者。我有一個很奇怪的問題。Java - 逐行讀取csv文件 - 卡住正在讀取的奇怪的不存在的字符!

我試圖逐行讀取一個csv文件。我只是在測試線條的讀數時。每次我讀取一行時,該行都包含每個文本字符之間的方塊字符。我甚至在wordpad和記事本中將文件保存爲txt文件,但沒有任何更改。

因此我必須做一些愚蠢的事......

我有一個CSV文件,標準csv文件,是一個文本文件,在它的逗號。我嘗試閱讀一行文本,但是文本全部變成文本,並且無法在文本中找到該短語。

有什麼建議嗎?代碼如下。

//open csv 
    File filReadMe = new File(strRoot + "data2.csv"); 
    BufferedReader brReadMe = new BufferedReader 
    (new InputStreamReader(new FileInputStream(filReadMe))); 

    String strLine = brReadMe.readLine(); 
    //for all lines 
    while (strLine != null){ 

    //if line contains "(see also" 
    if (strLine.toLowerCase().contains("(see also")){ 
    //write line from "(see also" to ")" 
    int iBegin = strLine.toLowerCase().indexOf("(see also"); 
    String strTemp = strLine.substring(iBegin); 
    int iLittleEnd = strTemp.indexOf(")"); 
    System.out.println(strLine.substring(iBegin, iBegin + iLittleEnd)); 
    } 

    //update line 
    strLine = brReadMe.readLine(); 
    } //end for 

    brReadMe.close(); 
+0

什麼字符編碼是寫入文件?您正在使用沒有編碼的InputStreamReader,因此它將使用默認的平臺編碼,這並不總是您想要的。 – mdma 2010-05-20 21:23:14

+0

它是在Windows電腦上製作的,我使用的是Windows電腦...... – rockit 2010-05-20 21:31:13

回答

4

我只能認爲這是一個不一致的字符編碼。在記事本中打開文件,選擇另存爲,然後在下拉列表中選擇UTF-8作爲「編碼」。然後將「UTF-8」作爲第二個參數添加到InputStreamReader中,例如

BufferedReader brReadMe = new BufferedReader 
    (new InputStreamReader(new FileInputStream(filReadMe), "UTF-8")); 

這應該解決任何與編碼不一致的問題。

+0

謝謝,但沒有運氣。在閱讀行中仍看到正方形。 – rockit 2010-05-20 21:30:35

+1

每個字節之間都會出現壞字節,所以我懷疑是UTF-16編碼,而不是UTF-8。 Wooo! – 2010-05-20 21:37:07

+0

Wooo! UTF-16 - 就是這樣,對不起我是一個帶有文件格式lingo的newb – rockit 2010-05-20 21:38:39