Saltar al contenido

Cómo analizar un archivo CSV en un array en Android Studio

Este equipo de redactores ha pasado mucho tiempo buscando para dar espuestas a tu búsqueda, te compartimos la respuestas por esto nuestro objetivo es serte de gran apoyo.

Solución:

Dónde poner el archivo CSV en Android
Cree una carpeta llamada “raw” dentro de la carpeta “res” y coloque el archivo CSV en ella.

Cómo leer un archivo CSV, Nada especial ya que es Android. Todos vamos a utilizar nuestro código estándar de Java. Es mejor usar nuestro propio código en lugar de ir a una API. La siguiente clase es una utilidad para leer archivos CSV y se puede usar desde la aplicación de Android.
En el cual array almacenaremos elementos del archivo csv
En este ejemplo, es scorelist arraylist.

public class CSVFile 
    InputStream inputStream;

    public CSVFile(InputStream inputStream)
        this.inputStream = inputStream;
    

    public List read()
        List resultList = new ArrayList();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        try 
            String csvLine;
            while ((csvLine = reader.readLine()) != null) 
                String[] row = csvLine.split(",");
                resultList.add(row);
            
        
        catch (IOException ex) 
            throw new RuntimeException("Error in reading CSV file: "+ex);
        
        finally 
            try 
                inputStream.close();
            
            catch (IOException e) 
                throw new RuntimeException("Error while closing input stream: "+e);
            
        
        return resultList;
    

Entonces, ¿cómo cargar el archivo CSV desde la carpeta “sin procesar” y usar la utilidad anterior para leerlo?

InputStream inputStream = getResources().openRawResource(R.raw.stats);
CSVFile csvFile = new CSVFile(inputStream);
List scoreList = csvFile.read();

MainActivity.java

public class MainActivity extends Activity 
    private ListView listView;
    private ItemArrayAdapter itemArrayAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        itemArrayAdapter = new ItemArrayAdapter(getApplicationContext(), R.layout.item_layout);

        Parcelable state = listView.onSaveInstanceState();
        listView.setAdapter(itemArrayAdapter);
        listView.onRestoreInstanceState(state);

        InputStream inputStream = getResources().openRawResource(R.raw.stats);
        CSVFile csvFile = new CSVFile(inputStream);
        List scoreList = csvFile.read();

        for(String[] scoreData:scoreList ) 
            itemArrayAdapter.add(scoreData);
        
    

ItemArrayAdapter.java

public class ItemArrayAdapter extends ArrayAdapter 
    private List scoreList = new ArrayList();

    static class ItemViewHolder 
        TextView name;
        TextView score;
    

    public ItemArrayAdapter(Context context, int textViewResourceId) 
        super(context, textViewResourceId);
    

    @Override
    public void add(String[] object) 
        scoreList.add(object);
        super.add(object);
    

    @Override
    public int getCount() 
        return this.scoreList.size();
    

    @Override
    public String[] getItem(int index) 
        return this.scoreList.get(index);
    

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) 
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.item_layout, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.name = (TextView) row.findViewById(R.id.name);
            viewHolder.score = (TextView) row.findViewById(R.id.score);
            row.setTag(viewHolder);
         else 
            viewHolder = (ItemViewHolder)row.getTag();
        
        String[] stat = getItem(position);
        viewHolder.name.setText(stat[0]);
        viewHolder.score.setText(stat[1]);
        return row;
    

activity_mail.xml


    

item_layout.xml



    
    

Para ver el código fuente completo, puede consultar estos enlaces javapapers.com/wp-content/uploads/2014/07/CSVFileRead.zip

Creo que eso ayudará

Un mejor analizador de CSV maneja los campos entre comillas

    import android.content.Context;
    import android.widget.Toast;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;

    public class CSVReader 
        private class StringDArray 
            private String[] data=new String[0];
            private int used=0;
            public void add(String str) 
                if (used >= data.length)
                    int new_size= used+1;
                    String[] new_data=new String[new_size];
                    java.lang.System.arraycopy( data,0,new_data,0,used);
                    data=new_data;
                
                data[used++] = str;
            
            public int length()
                return  used;
            
            public String[] get_araay()
                return data;
            
        
        private  Context context;
        public CSVReader(Context context)
            this.context=context;
        
        public List read(File file)
            List resultList = new ArrayList();
            try
                InputStream inputStream= new FileInputStream(file);
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String csvLine;
                final char Separator = ',';
                final char Delimiter = '"';
                final char LF = 'n';
                final char CR = 'r';
                boolean quote_open = false;
                while ((csvLine = reader.readLine()) != null) 
                    //String[] row = csvLine.split(",");// simple way
                    StringDArray a=new StringDArray();
                    String token="";
                        csvLine+=Separator;
                    for(char c:csvLine.toCharArray())
                        switch (c)
                            case LF: case CR:// not required as we are already read line
                                quote_open=false;
                                a.add(token);
                                token="";
                            break;
                            case Delimiter:
                                quote_open=!quote_open;
                            break;
                            case Separator:
                                if(quote_open==false)
                                    a.add(token);
                                    token="";
                                else
                                    token+=c;
                                
                            break;
                            default:
                                token+=c;
                            break;
                        
                    
                    if(a.length()>0 ) 
                        if(resultList.size()>0)
                            String[] header_row =(String[]) resultList.get(0);
                            if(a.length()>=header_row.length) 
                                String[] row = a.get_araay();
                                resultList.add(row);
                            
                        else
                            String[] row = a.get_araay();
                            resultList.add(row);//header row
                        
                    
                
                inputStream.close();
            catch (Exception e)
                Toast.makeText(context,"Error : " + e.getMessage(), Toast.LENGTH_LONG).show();
            
            return resultList;
        
    

Uso

    File file=new File(path);
    CSVReader csvReader=new CSVReader(activity.this);
    List csv=csvReader.read(file);
    if(csv.size()>0)
        String[] header_row =(String[]) csv.get(0);
        if(header_row.length>1)
            String col1=header_row[0];
            String col2=header_row[1];
        
    

    Toast.makeText(activity.this,csv.size() + " rows", Toast.LENGTH_LONG).show();

Datos de muestra utilizados

ID, nombre
1, elemento de prueba 1
“2”, “Elemento de prueba 2”
“3”, “Prueba, elemento 3”
4, elemento de prueba 4

Descargo de responsabilidad: Nunca he trabajado con Android, pero conozco Java, así que espero que sea lo mismo.

Dicho esto, puedes probar algo como esto.

Scanner scanner = new Scanner(new File("file.csv"));
ArrayList pokemon = new ArrayList<>();
while(scanner.hasNextLine()) 
    pokemon.add(scanner.nextLine().split(",")[1]);

scanner.close();

Si te sientes suscitado, eres capaz de dejar un enunciado acerca de qué le añadirías a este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *