Android – Generar archivo CSV a partir de los valores de la tabla

Tengo una base de datos que contiene una tabla, quiero generar un archivo CSV con los valores de esta tabla.

En realidad, quiero enviar este archivo CSV como un archivo adjunto. Sé acerca de enviar archivos como datos adjuntos en el intent(ACTION_SEND) correo electrónico intent(ACTION_SEND) , pero no sé el procedimiento de creación o el método mediante el cual puedo crear archivos con formato CSV.

Por favor dame sugerencias o ideas.

Puedes usar opencsv para esto

Descargue la biblioteca desde aquí:

http://sourceforge.net/projects/opencsv/

En esto puedes encontrar el archivo jar.

Dentro de tu actividad usa esto:

 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 } 

Esto podría ser útil. Necesitaba ‘;’ como separador entre los valores del campo. Utilice ‘,’ en consecuencia para la generación de CSV.

Gracias, Darshan

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

Esto parece realmente prometedor. Tomará cualquier objeto Java y lo convertirá a un archivo CSV:

http://supercsv.sourceforge.net/

También podría ser posible recuperar los datos de la base de datos en formato CSV.

Agregando a @ Cocos2dx respuesta:

Cuando consulta desde db puede tener campos nulos, en mi caso uso un controlador para buscar los datos en una lista de objetos, pero si no lo hace debe verificar los valores nulos o vacíos y formatearlos (o pueden hacer su mesa se ve rara):

 String[] details = { replaceNull(someObject.getId()), replaceNull(someObject.getName()) }; public static String replaceNull(String input) { return ((input == null || input.isEmpty()) ? " " : input); } writer.writeNext(details);