2016-07-16 4 views
7

Ich frage mich, wie man eine CSV-Datei analysieren und nur den Inhalt in einem Array speichern. Meine CSV-Datei sieht etwa so aus:Wie analysiert CSV-Datei in einem Array in Android Studio

1,bulbasaur,1,7,69,64,1,1 
2,ivysaur,2,10,130,142,2,1 

Ich möchte nur die Namen, also das zweite Feld. Ich möchte alle diese Elemente in der CSV in einem Array oder Array-String speichern.

Irgendwelche Ideen, wie man das macht?

Jede Hilfe würde sehr geschätzt werden!

Antwort

9

Wo die CSV-Datei in Android setzen Erstellen Sie einen Ordner „raw“ innerhalb der „res“ Ordner mit dem Namen und in ihm die CSV-Datei setzen.

So lesen Sie CSV-Datei, Nichts besonderes seit seinem Android. Alles, was wir verwenden, wird unseren Standard-Java-Code verwenden. Es ist besser, unseren eigenen Code zu verwenden, anstatt zu einer API zu gehen. Die folgende Klasse ist ein Dienstprogramm zum Lesen einer CSV-Datei und kann innerhalb der Android-Anwendung verwendet werden. In welchem ​​Array werden wir Elemente der CSV-Datei speichern In diesem Beispiel ist es Scorelist Arraylist.

So, wie man die CSV-Datei vom "rohen" Ordner lädt und das oben genannte Dienstprogramm benutzt, um es zu lesen?

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

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/name" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="20dp" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/score" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="20dp" /> 
</RelativeLayout> 

Für den gesamten Quellcode können Sie bezieht sich auf diesen Link javapapers.com/wp-content/uploads/2014/07/CSVFileRead.zip

Ich denke, es

1

Haftungsausschluss: Ich habe nie mit Android gearbeitet, aber ich kenne Java, also hoffentlich ist es alles gleich.

Das gesagt, Sie können so etwas versuchen.

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

Android standardmäßig helfen wird, nicht den rohen Ordner erstellen Erstellen Sie einen Rohordner unter res/row in Ihrem Projekt. kopiere deine CSV-Datei darin. Halten Sie den Namen der CSV-Datei in Kleinbuchstaben und konvertieren Sie sie in das Textformat, wenn Sie dazu aufgefordert werden. Der Name meiner CSV-Datei lautet welldata.scv WellData - das ist die Modellklasse mit Getter und Setter. wellDataList ist die ArrayList zum Speichern der Daten.

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) { 
     //set splitter 
     String[] tokens = line.split(","); 

     //read the data 
     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(); 
} 

} }