2016-07-16 8 views
7

में एक सरणी में CSV फ़ाइल को पार्स करने के लिए कैसे करें मैं सोच रहा हूं कि CSV फ़ाइल को कैसे पार्स करें और केवल सामग्री को सरणी में संग्रहीत करें। मेरी सीएसवी फ़ाइल इस तरह कुछ दिखती है:एंड्रॉइड स्टूडियो

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

मुझे केवल नाम चाहिए, तो दूसरा फ़ील्ड। मैं इन सभी वस्तुओं को सीएसवी में एक सरणी या स्ट्रिंग की सरणी सूची में स्टोर करना चाहता हूं।

कोई विचार यह कैसे करना है?

किसी भी मदद की सराहना की जाएगी!

उत्तर

9

कहाँ एंड्रॉयड में CSV फ़ाइल डाल "रेस" फ़ोल्डर के अंदर "कच्चे" नाम का एक फ़ोल्डर बनाएँ और उस में CSV फ़ाइल डाल करने के लिए।

सीएसवी फ़ाइल, कैसे पढ़ा जाए इसके एंड्रॉइड के बाद से कुछ खास नहीं है। हम अपने मानक जावा कोड का उपयोग करने जा रहे हैं। एक एपीआई जाने के बजाय अपने कोड का उपयोग करना बेहतर है। निम्नलिखित वर्ग सीएसवी फ़ाइल पढ़ने के लिए उपयोगिता है और इसका उपयोग एंड्रॉइड एप्लिकेशन के भीतर से किया जा सकता है। किस सरणी में हम सीएसवी फ़ाइल के आइटम स्टोर करेंगे इन उदाहरणों में यह स्कोरलिस्ट सरणीसूची है।

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

तो "कच्चे" फ़ोल्डर से सीएसवी फ़ाइल को कैसे लोड करें और इसे पढ़ने के लिए उपर्युक्त उपयोगिता का उपयोग कैसे करें?

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.javapapers.android.csvfileread.app.MainActivity"> 
    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/listView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" /> 
</RelativeLayout> 

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> 

पूरे स्रोत कोड आप कर सकते हैं के लिए इन लिंक javapapers.com/wp-content/uploads/2014/07/CSVFileRead.zip

मुझे लगता है कि यह

1

अस्वीकरण: मैंने कभी एंड्रॉइड के साथ काम नहीं किया है, लेकिन मुझे जावा पता है, तो उम्मीद है कि यह वही है।

कहा जा रहा है, आप इस तरह कुछ कोशिश कर सकते हैं।

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

एंड्रॉयड में मदद मिलेगी डिफ़ॉल्ट रूप से कच्चे फ़ोल्डर बना नहीं है को संदर्भित करता है अपनी परियोजना में res/raw के तहत कच्चे फ़ोल्डर को बनाएं। उसमें अपनी सीएसवी फ़ाइल कॉपी करें। सीएसवी फ़ाइल के निचले मामले का नाम रखें और पूछे जाने पर टेक्स्ट प्रारूप में कनवर्ट करें। मेरा सीएसवी फ़ाइल नाम welldata.scv वेलडाटा है - यह गेटर और सेटर के साथ मॉडल क्लास है। डेटा स्टोर करने के लिए wellDataList ArrayList है।

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

} }

संबंधित मुद्दे