0

作業中の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

コメントアウトすると

期間=Float.parseFloat(tokens.nextToken());

メソッドを実行します。誰かがこの方法で何か欠点を見つけることができますか?

4

1 に答える 1

3

You could try using OpenCSV http://opencsv.sourceforge.net/

It is pretty simple to use and returns an array of each row.

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

Like I said, it is easy to use and prevents you from having to parse out the string on your own.

于 2013-03-01T15:19:06.653 に答える