Android - создание CSV файла из значений таблицы
У меня есть база данных, содержащая одну таблицу, я хочу сгенерировать CSV файл со значениями этой таблицы.
Собственно, я хочу отправить этот CSV файл в виде вложения. Я знаю, что отправка файла в виде вложения по электронной почте intent(ACTION_SEND)
, но я не знаю процедуры создания или метода, с помощью которого я могу создать файл в формате CSV.
Пожалуйста, дайте мне предложения или идеи.
Ответы
Ответ 1
Вы можете использовать opencsv
для этого
Скачайте библиотеку отсюда:
http://sourceforge.net/projects/opencsv/
В этом вы можете найти файл jar.
Внутри вашей деятельности используйте это:
CSVWriter writer = null;
try
{
writer = new CSVWriter(new FileWriter("/sdcard/myfile.csv"), ',');
String[] entries = "first#second#third".split("#"); // array of your values
writer.writeNext(entries);
writer.close();
}
catch (IOException e)
{
//error
}
Ответ 2
Это может быть полезно. Мне нужно ';' как разделитель между значениями feild. Пожалуйста, используйте "," соответственно для генерации CSV.
Спасибо,
Даршан
private void exportTheDB() throws IOException
{
File myFile;
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
String TimeStampDB = sdf.format(cal.getTime());
try {
myFile = new File(extStorageDirectory+"/Export_"+TimeStampDB+".csv");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append("Start time;End time;Elapse;Sports type");
myOutWriter.append("\n");
sampleDB = this.openOrCreateDatabase(DB_NAME,MODE_PRIVATE, null);
Cursor c = sampleDB.rawQuery("SELECT * FROM Sport_Records ", null);
if (c != null) {
if (c.moveToFirst()) {
do {
String start_Time = c.getString(c.getColumnIndex("startTimeDate"));
String end_Time = c.getString(c.getColumnIndex("endTimeDate"));
String elapse_Time = calculateTimeDifferece(end_Time, start_Time);
String sport_Name = c.getString(c.getColumnIndex("label"));
myOutWriter.append(start_Time+";"+end_Time+";"+elapse_Time+";"+sport_Name);
myOutWriter.append("\n");
}
while (c.moveToNext());
}
c.close();
myOutWriter.close();
fOut.close();
}
} catch (SQLiteException se)
{
Log.e(getClass().getSimpleName(),"Could not create or Open the database");
}
finally {
sampleDB.close();
}
}
Ответ 3
Это выглядит многообещающе. Он возьмет любой объект Java и преобразует его в файл CSV:
http://supercsv.sourceforge.net/
Также может быть возможно получить данные из базы данных в формате CSV.
Ответ 4
Добавление в ответ @Cocos2dx:
При запросе из db у вас могут быть нулевые поля, в моем случае я использую контроллер для извлечения данных в списке объектов, но либо если вы не должны проверять нулевые или пустые значения и их надлежащий формат (или они могут заставить вашу таблицу выглядеть странно):
String[] details = {
replaceNull(someObject.getId()),
replaceNull(someObject.getName())
};
public static String replaceNull(String input) {
return ((input == null || input.isEmpty()) ? " " : input);
}
writer.writeNext(details);