android csv读取数据格式,在Android中获取和解析CSV文件

更好的CSV解析器可以处理带引号的字段

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(InputStream inputStream){

List resultList = new ArrayList();

try{

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;

}

}

用法

File file=new File(path);

CSVReader csvReader=new CSVReader(activity.this);

List csv=csvReader.read( new FileInputStream(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();

使用的样本数据

ID,名称

1,测试项目1

“ 2”,“测试项目2”,

“ 3”,“测试,项目3”

4,测试项目4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值