从java中的CSV文件中提取值

时间:2013-03-01 14:06:48

标签: java android csv

我正在努力从我正在处理的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());

它将运行该方法。任何人都可以发现这种方法的任何错误吗?

1 个答案:

答案 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();

就像我说的那样,它很容易使用,并且可以防止你自己解析字符串。