Чтение содержимого файла CSV - PullRequest
0 голосов
/ 21 октября 2011

Я сделал программу чтения ресурсов с примером кода из здесь .Вот мой код ...

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();
    }
}

мой файл читается на резюме с использованием этого кода ...

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 Ответ

3 голосов
/ 22 октября 2011

values.toString() будет только выводить представление массива значений (в данном случае его расположение в памяти). Вам необходимо вывести отдельные значения. Как то так:

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

РЕДАКТИРОВАТЬ: Вы также повторной инициализации values при каждом запуске цикла while. Вы можете использовать StringBuilder и просто добавлять строки до конца, а затем разбивать их на массив или использовать ArrayList, хранить каждую строку в локальной строке, разбивать ее и добавлять эти значения внешний 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();
    }
}

Это у меня в голове, так что не вини меня, если они не компилируются как есть, хаха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...