读取资源文件夹中的 CSV 文件安卓



我正在用netbeans开发一个Android应用程序。我正在尝试使用 opencsv 读取 CSV 文件。当我将文件放在资源文件夹中并尝试从那里读取它时,在构建资源目录时出现错误。我应该在哪里存储 csv 文件,以便每次应用程序启动时都可以读取它?

您应该将csv文件放在资产文件夹中。

InputStreamReader is = new InputStreamReader(getAssets()
                        .open("filename.csv"));
BufferedReader reader = new BufferedReader(is);
reader.readLine();
String line;
while ((line = reader.readLine()) != null) {
                        
}

一些建议;

  • 创建一个对象,用于将一行数据保存到 csv 中。( Ex: YourSimpleObject .它使您可以轻松管理数据。
  • 逐行读取文件并分配给对象。 将对象添加到列表。(例:ArrayList<YourSimpleObject >

法典:

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

}

作为替代方案,请查看uniVocityParsers。它提供了大量解析分隔文件的方法。下面的示例将 csv 文件(见下图)从 res/raw 文件夹加载到 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();

要将 univocityParsers 添加到您的 Android 项目中:

compile group: 'com.univocity', name: 'univocity-parsers', version: '2.3.0'

使用 opencsv:

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

您可以使用此代码

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

您可以从以下位置下载csvreader文件http://sourceforge.net/projects/opencsv/files/latest/download

并导入到您的项目中

相关内容

  • 没有找到相关文章

最新更新