2011-10-21 152 views
0

我已經使用here的一些示例代碼編寫了一個資源閱讀器。這裏是我的代碼...閱讀CSV文件的內容

public static void ReadFile() { 

    BufferedReader reader = new BufferedReader(new InputStreamReader(file)); 

    String line; 
    try { 
     while((line = reader.readLine()) != null){ 
      String[] values = line.split(","); 

      Log.d(TAG, String.valueOf(values.toString())); 
     } 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
} 

我的文件是隻讀的onResume使用此代碼...

InputStream file = getResources().openRawResource(R.raw.csvfile); 

,我想我已經得到了它的權利,但是當我使用

Log.d() 

實用程序讀取我的CSV文件中的值(如上圖所示),我得到的東西,而不是別的

10-21 20:38:44.096: DEBUG/input(15223): [Ljava.lang.String;@467bbb20 
10-21 20:38:44.104: DEBUG/input(15223): [Ljava.lang.String;@467bbfd8 
10-21 20:38:44.104: DEBUG/input(15223): [Ljava.lang.String;@467bc3e0 
10-21 20:38:44.112: DEBUG/input(15223): [Ljava.lang.String;@467bc7e8 
10-21 20:38:44.112: DEBUG/input(15223): [Ljava.lang.String;@467bcbf0 
10-21 20:38:44.112: DEBUG/input(15223): [Ljava.lang.String;@467bcff8 
10-21 20:38:44.112: DEBUG/input(15223): [Ljava.lang.String;@467bd400 
10-21 20:38:44.120: DEBUG/input(15223): [Ljava.lang.String;@467bd808 
10-21 20:38:44.120: DEBUG/input(15223): [Ljava.lang.String;@467bdc10 
10-21 20:38:44.120: DEBUG/input(15223): [Ljava.lang.String;@467bde60 

現在我不知道你是否可以像這樣從BufferReader直接返回,但這裏的值似乎比我的csv文件中的值要小得多。這是我的csv文件

001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000, 
001, 000, 000, 000, 000, 000 

很空我知道,但我會得到這個權利還是應該我的日誌標籤返回一些可讀的數據,如果是的話我在做什麼錯在這裏。

+1

你在期待什麼「values.toString()」的值是一個數組? – Birey

+0

@Bipins嗯,我想我期待從我的csv值出現也許有一個額外的步驟,我已經錯過 – Jack

+0

我不認爲它會輸出數組的字符串。可能是 deepToString()會返回所有的字符串。 – Birey

回答

3

values.toString()只會輸出values數組的表示形式(在本例中爲其在內存中的位置)。您需要輸出個別值。事情是這樣的:

for(String s : values) Log.d(TAG, s); 

編輯:你也對while循環的每一次運行重新初始化values。你可以使用一個StringBuilder,直到你到達最後,然後把它分割成一個數組,或者你可以使用一個ArrayList,將每一行存儲在一個本地String中,分割它,然後將這些值附加到外部ArrayList。

沒問題。 :)爲了未來的讀者,我會很高興地添加一個例子。

有了一個StringBuilder:

public static void ReadFile() { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(file)); 
    StringBuilder sb = new StringBuilder(); 
    String line; 
    try { 
     while((line = reader.readLine()) != null) { 
      sb.append(line); 
     } 
     String[] values = (sb.toString()).split(","); 
     for(String s : values) Log.d(TAG, s); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

或者每行可附加:

public static void ReadFile() { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(file)); 
    String line; 
    ArrayList<String> values = new ArrayList<String>(); 
    try { 
     while((line = reader.readLine()) != null) { 
      String[] strings = line.split(","); 
      for(String s : strings) { 
       values.add(s); 
      } 
     } 
     for(String s : values) Log.d(TAG, s); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

這是把我的頭,所以不要指責我,如果他們不進行編譯原樣,哈哈。

+0

啊是的,這很有效,非常感謝^^,但是你能舉一個例子或者指向一個教程的鏈接,這個教程展示瞭如何把這些值放入數組列表中,就像你推薦的那樣。謝謝^^ – Jack

+0

不用擔心我已經知道謝謝了人^^ – Jack

+0

只是一件事:/有沒有在類之間共享ArrayLists的方法(因爲當我嘗試正常的getValue(){返回值;}方法我的ArrayList似乎即使我嘗試從同一類中的getValue()方法中讀取它,它也會丟失所有數據。 – Jack