Как читать и записывать в файл csv в Android?

#android #opencsv

#Android #opencsv

Вопрос:

Я хочу сохранить 8 целых чисел в файле .csv (имя файла будет взято в качестве входных данных из EditText) и извлекать их, когда захочу.

Комментарии:

1. Учебное пособие: codeproject.com/Questions/491823 /…

2. в чем вопрос?

Ответ №1:

Чтобы получить имя файла, вы можете использовать это:

 EditText fileNameEdit= (EditText) getActivity().findViewById(R.id.fileName);
String fileName = fileNameEdit.getText().toString();
  

Затем запишите файл на диск:

 try {
    String content = "Separe here integers by semi-colon";
    File file = new File(fileName  ".csv");
    // if file doesnt exists, then create it
    if (!file.exists()) {
       file.createNewFile();
    }

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(content);
    bw.close();

} catch (IOException e) {
    e.printStackTrace();
}
  

Чтобы прочитать файл:

 BufferedReader br = null; 
try {
  String sCurrentLine;
  br = new BufferedReader(new FileReader(fileName ".csv"));
  while ((sCurrentLine = br.readLine()) != null) {
    System.out.println(sCurrentLine);
  }
} catch (IOException e) {
    e.printStackTrace();
} finally {
  try {
     if (br != null)br.close();
  } catch (IOException ex) {
     ex.printStackTrace();
  }
}
  

Затем, чтобы иметь целые числа, вы можете использовать функцию разделения:

 String[] intArray = sCurrentLine.split(";");
  

Комментарии:

1. Как мне указать полное имя файла. Я попытался упомянуть «/ storage/ sdcard0 / test» в EditText, но он всегда переходит в блок catch. Нужно ли мне добавлять разрешение WRITE_EXTERNAL_STORAGE в AndroidManifest.xml ? Пожалуйста, помогите. Спасибо.

2. РЕДАКТИРОВАТЬ: Готово! Мне просто нужно было добавить разрешение WRITE_EXTERNAL_STORAGE в AndroidManifest.xml досье.

Ответ №2:

Opencsv не работает на Android из-за проблемы с JDK.

Если вы видите аналог следующего:

05-04 16:13:31.821 25829-25829/? E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.pk.opencsvpoc, PID: 25829 java.lang.Ошибка NoClassDefFoundError: не удалось разрешить: Ljava / beans / Introspector;

Это потому, что Android портировал только подмножество java.beans в свою версию java. Вы можете увидеть список того, что поддерживается на https://developer.android.com/reference/java/beans/package-summary

Есть планы переключиться на отражение в opencsv 5.0, но я сомневаюсь, что это удалит все наши зависимости от java.beans. На данный момент лучшее предложение для opencsv — избегать классов com.opencsv.bean, пока Android полностью не поддержит java.beans или мы успешно удалим java.beans.

Другая возможность — попробовать другую библиотеку csv. Я проверил apache commons csv и super-csv, и apache не преобразует в beans, а super-csv использует только отражение.

Источник: https://sourceforge.net/p/opencsv/wiki/FAQ/#getting-noclassdeffounderror-when-using-android

Ответ №3:

CSV — это обычный текстовый файл, где значения разделены символом «;» итак, вы можете записать его, например, с помощью BufferedWriter.

BufferedWriter