#android #csv #bufferedreader
#Android #csv #bufferedreader
Вопрос:
Я создал программу чтения ресурсов с некоторым примером кода отсюда. Вот мой код…
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. чего вы ожидаете от «значений. toString()» где значения — это массив?
2. @Bipins Ну, я думаю, я ожидал, что появятся значения из моего csv, может быть, есть дополнительный шаг, который я пропустил
3. Я не думаю, что он будет выводить строки, которые есть в массиве. вероятно, deepToString() вернет все строки.
Ответ №1:
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();
}
}
Это не в моей голове, так что не вините меня, если они не скомпилируются как есть, ха-ха.
Комментарии:
1. Ах, да, это отлично работает, спасибо ^^ но не могли бы вы привести пример или ссылку на учебное пособие, в котором показано, как помещать значения в список массивов, как вы рекомендовали. Спасибо ^^
2. Только одно:/ есть ли способ совместного использования списков массивов между классами (потому что, когда я пытаюсь использовать обычный метод GetValue(){возвращаемое значение;}, мой ArrayList, похоже, теряет все свои данные, даже как только я пытаюсь прочитать его из метода GetValue(), который находится в том же классе.
3. На самом деле не волнуйтесь, я только что открыл для себя магию Google ^^