2013-11-14 10 views
6

私はnetbeansでアンドロイドアプリを開発しています。 opencsvを使ってCSVファイルを読み込もうとしています。ファイルをリソースフォルダに入れてそこから読み込もうとすると、無効なリソースディレクトリの作成中にエラーが発生します。どこでcsvファイルを保存すれば、アプリが起動するたびに読み込むことができますか?あなたは資産フォルダ内のCSVファイルを置くべきリソースフォルダ内のCSVファイルを読むandroid

答えて

7

..

InputStreamReader is = new InputStreamReader(getAssets() 
         .open("filename.csv")); 

       BufferedReader reader = new BufferedReader(is); 
       reader.readLine(); 
       String line; 
       while ((line = reader.readLine()) != null) { 

        } 
1

あなたがあなたのプロジェクトに http://sourceforge.net/projects/opencsv/files/latest/download

およびインポートからcsvreaderファイルをダウンロードすることができる

try { 
       InputStream csvStream = assetManager.open(CSV_PATH); 
       InputStreamReader csvStreamReader = new  InputStreamReader(csvStream); 
       CSVReader csvReader = new CSVReader(csvStreamReader); 
       String[] line; 

       // throw away the header 
       csvReader.readNext(); 

       while ((line = csvReader.readNext()) != null) { 
        questionList.add(line); 
       } 
       } catch (IOException e) { 
       e.printStackTrace(); 
       } 

このコードを使用することができます

7

いくつかのアドバイス

  • csvに1つの行データを保持するオブジェクトを作成します。 (Ex: YourSimpleObject。データを簡単に管理できます。)
  • ファイルを行単位で読み込んでオブジェクトに割り当てます。リストするオブジェクトを追加します。 (例:ArrayList<YourSimpleObject >

コード:

opencsv使用
private void readAndInsert() throws UnsupportedEncodingException { 


ArrayList<YourSimpleObject > objList= new ArrayList<YourSimpleObject >(); 
AssetManager assetManager = getAssets(); 
InputStream is = null; 

      try { 
       is = assetManager.open("questions/question_bank.csv"); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      BufferedReader reader = null; 
      reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 

      String line = ""; 
      StringTokenizer st = null; 
      try { 

       while ((line = reader.readLine()) != null) { 
        st = new StringTokenizer(line, ","); 
        YourSimpleObject obj= new YourSimpleObject(); 
            //your attributes 
        obj.setX(st.nextToken()); 
        obj.setY(st.nextToken()); 
        obj.setZ(st.nextToken()); 
        obj.setW(st.nextToken()); 

        objList.add(sQuestion); 

       } 
      } catch (IOException e) { 

       e.printStackTrace(); 
      } 



} 
0

:代替手段として

InputStream is = context.getAssets().open(path); 
InputStreamReader reader = new InputStreamReader(is, Charset.forName("UTF-8")); 
List<String[]> csv = new CSVReader(reader).readAll(); 
1

を、uniVocityParsersを見てみましょう。区切られたファイルを解析するための膨大な数の方法を提供します。この例では、res/rawフォルダからCsvファイル(下の図を参照)をInputStreamオブジェクトにロードし、それを月単位で読み込みます(key = Column & value = ColumnValuesのマップ)。

calendario_bolsa.csv

//Gets your csv file from res/raw dir and load into a InputStream. 
InputStream csvInputStream = getResources().openRawResource(R.raw.calendario_bolsa); 

//Instantiate a new ColumnProcessor 
ColumnProcessor columnProcessor = new ColumnProcessor(); 

//Define a class that hold the file configuration 
CsvParserSettings parserSettings = new CsvParserSettings(); 
parserSettings.getFormat().setLineSeparator("\n"); 
parserSettings.setHeaderExtractionEnabled(true); 
parserSettings.setProcessor(columnProcessor); 

//Creates a new CsvParser, passing the settings into its construtor: 
CsvParser csvParser = new CsvParser(parserSettings); 

//Calls parse method, instantiating an InputStreamReader, passing to its constructor the InputStream object 
csvParser.parse(new InputStreamReader(csvInputStream)); 

//Gets the csv data as a Map of Column/column values. 
Map<String, List<String>> columnarCsv = columnProcessor.getColumnValuesAsMapOfNames(); 

あなたのAndroidプロジェクトにunivocityParsersを追加するには:

compile group: 'com.univocity', name: 'univocity-parsers', version: '2.3.0' 
関連する問題