Android从SD卡读取文本文件并将其存储在ArrayList中

时间:2011-04-07 09:43:14

标签: android-widget

我需要这方面的帮助,我正在尝试读取存储在SD卡中的文本文件,并将结果存储在ArrayList中以供后续使用,但代码崩溃了。

公共类Mytextreader扩展了Activity {     final ArrayList> dataList = new ArrayList>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    loadData();
    String text = "";
    for (int i = 0; i < dataList.size(); i++) {
        text = text + dataList.get(i).get("name") + ":"
                + dataList.get(i).get("image") + ":"
                + dataList.get(i).get("price") + ":"
                + dataList.get(i).get("barcode") + "\n";
    }
    TextView txv = (TextView) findViewById(R.id.textView01);
    txv.setText(text);
}

private void loadData() {

    File sdcardDir = Environment.getExternalStorageDirectory();
    String sdcard = sdcardDir.getAbsolutePath();
    File file = new File(sdcard + "/Downloads/data/data.txt");

    // For each entry the following lines are repeated

    HashMap<String, String> hmap = new HashMap<String, String>();
    String text = "", line = "";

    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(file));
        while ((line = br.readLine()) != null) {
            text = text + line + "\n";

        }
        br.close();
    } catch (IOException e) {
        Log.d("File Read test: Error= ", e.getMessage());
    }

    while (true) {
        line = text.substring(0, text.indexOf('\n'));
        text = text.substring(text.indexOf('\n') + 1);

        hmap.put("name", line.substring(0, line.indexOf(';')));
        line = line.substring(line.indexOf(';') + 1);
        // Toast.makeText(this, line, Toast.LENGTH_LONG).show();
        hmap.put("image", line.substring(0, line.indexOf(';')));
        line = line.substring(line.indexOf(';') + 1);
        // Toast.makeText(this, line, Toast.LENGTH_LONG).show();
        hmap.put("price", line.substring(0, line.indexOf(';')));
        line = line.substring(line.indexOf(';') + 1);
        // Toast.makeText(this, line, Toast.LENGTH_LONG).show();
        hmap.put("barcode", line);
        dataList.add(hmap);
        hmap.clear();
        if (text.length() == 0)
            break;

    }

}

}

1 个答案:

答案 0 :(得分:0)

好的修复,文本文件有一个空行,删除了该行,代码现在正常