Solución:
Pruebe OpenCSV, le facilitará la vida.
Primero, agregue este paquete a su gradle
dependencias de la siguiente manera
implementation 'com.opencsv:opencsv:4.6'
Entonces puedes hacer
import com.opencsv.CSVReader;
import java.io.IOException;
import java.io.FileReader;
...
try {
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
} catch (IOException e) {
}
o
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
List myEntries = reader.readAll();
Editar después del comentario
try {
File csvfile = new File(Environment.getExternalStorageDirectory() + "/csvfile.csv");
CSVReader reader = new CSVReader(new FileReader(csvfile.getAbsolutePath()));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "The specified file was not found", Toast.LENGTH_SHORT).show();
}
Si desea empaquetar el .csv
archivo con la aplicación y haga que se instale en el almacenamiento interno cuando se instale la aplicación, cree un assets
carpeta en su proyecto src/main
carpeta (p. ej., c:myappappsrcmainassets
), y poner el .csv
archivo allí, luego haga referencia a él de esta manera en su actividad:
String csvfileString = this.getApplicationInfo().dataDir + File.separatorChar + "csvfile.csv"
File csvfile = new File(csvfileString);
El siguiente fragmento lee un archivo CSV del raw
carpeta de recursos (que se empaquetará en su .apk
archivo en compilación).
Android de forma predeterminada no crea el raw
carpeta. Cree una carpeta sin formato en res/raw
en su proyecto y copie su archivo CSV en él. Mantenga el nombre del archivo CSV en minúsculas y conviértalo en formato de texto cuando se le solicite. Mi nombre de archivo CSV es welldata.csv
.
En el fragmento, WellData
es la clase modelo (con constructor, getter y setter) y wellDataList
es el ArrayList
para almacenar los datos.
private void readData() {
InputStream is = getResources().openRawResource(R.raw.welldata);
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
try {
while ((line = reader.readLine()) != null) {
// Split the line into different tokens (using the comma as a separator).
String[] tokens = line.split(",");
// Read the data and store it in the WellData POJO.
WellData wellData = new WellData();
wellData.setOwner(tokens[0]);
wellData.setApi(tokens[1]);
wellData.setLongitude(tokens[2]);
wellData.setLatitude(tokens[3]);
wellData.setProperty(tokens[4]);
wellData.setWellName(tokens[5]);
wellDataList.add(wellData);
Log.d("MainActivity" ,"Just Created " + wellData);
}
} catch (IOException e1) {
Log.e("MainActivity", "Error" + line, e1);
e1.printStackTrace();
}
}
Esto funcionó para mí en Kotlin. Deberá colocar el archivo myfile.csv en la carpeta res / raw, creando la carpeta si no está allí.
val inputStream: InputStream = resources.openRawResource(R.raw.myfile)
val reader = BufferedReader(InputStreamReader(inputStream, Charset.forName("UTF-8")))
reader.readLines().forEach {
//get a string array of all items in this line
val items = it.split(",")
//do what you want with each item
}