我正在努力从我正在处理的Android应用的CSV文件中提取值。 CSV文件采用以下格式:
Acton Town (District),Acton Town (Piccadilly),2.00
Aldgate (Circle),Aldgate (Metropolitan),4.00
Aldgate East (District),Aldgate East (Hammersmith And City),2.00
我试图使用以下方法将其导入我的java类:
public ArrayList<Connection> importConnections(){
try
{
//gets the lines.txt file from assets
in = this.getAssets().open("connections.csv");
Scanner scan = new Scanner(in);
TextView lineData = (TextView)findViewById(R.id.displayLine);
String connection = null;
String startingStation = null;
String endingStation = null;
Float duration = 0;
do
{
connection = scan.nextLine();
String delimiter = ",\n";
StringTokenizer tokens = new StringTokenizer(connection, delimiter);
startingStation = tokens.nextToken();
endingStation = tokens.nextToken();
duration = Float.parseFloat(tokens.nextToken());
connections.add(startStation, endStation, duration);
}
while(scan.hasNext());
//for testing purposes
lineData.setText(endingStation);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return connections;
}
如果我运行它,应用程序将崩溃,我无法弄清楚原因。如果我将lineData.setText(endingStation)
设置为lineData.setText(connection)
,它将显示整行,例如:
Acton Town (District),Acton Town (Piccadilly),2.00
如果我注释掉
duration = Float.parseFloat(tokens.nextToken());
它将运行该方法。任何人都可以发现这种方法的任何错误吗?
答案 0 :(得分:3)
您可以尝试使用OpenCSV http://opencsv.sourceforge.net/
使用起来非常简单,并返回每行的数组。
CSVReader reader = new CSVReader(new FileReader(<filepath>));
String[] temp;
int NUM = #; //number of rows in csv, or insert code to read through file until null.
for(int i = 0; i < NUM; i++)
{
temp = reader.readNext(); //read next line into temp
}
System.out.println(temp[0]); //Acton Town (District)
System.out.println(temp[1]); //Acton Town (Piccadilly)
System.out.println(temp[2]); //2.00 (string)
reader.close();
就像我说的那样,它很容易使用,并且可以防止你自己解析字符串。