0

我有一个包含大量内容的列表视图,我想知道如何将列表视图中的内容保存为文本文件?我正在从数据库中提取所有内容。

4

3 回答 3

2

尝试数组序列化(可以序列化并取回对象)

    ObjectOutputStream out;
    Object[] objs = new Object[yourListView.getCount()];

    for (int i = 0 ; i < youeListView.getCount();i++) {
        Object obj = (Object)yourListView.getItemAtPosition(i);
        objs[i] = obj;
    }
    try {
        out = new ObjectOutputStream(
                new FileOutputStream(
                        new File(yourFile.txt)));
        out.writeObject(objs);
        out.flush();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2012-11-15T23:55:51.583 回答
1

我假设您要保存用户单击的行的内容:

如果使用 ListActivity 覆盖 onListItemClick (ListView lv, View v, int position, long id)。然后 String str = lv.getItemAtPosition(position).toString() 可以给你包含在行中的字符串。根据您的具体实施,存在其他可能性。您还可以访问被单击的视图。

我认为您不想保存所有行的内容,因为您已经在数据库中拥有这些内容,并且可以从那里简单地查询和保存。

一旦你有了字符串。创建一个新文件并写入它。

一种写入文件的方法:

     try {
            File f = File.createTempFile("file", ".txt", Environment.getExternalStorageDirectory ());
            FileWriter fw = new FileWriter(f);
            fw.write(str);
            fw.close();

        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "Error while saving file", Toast.LENGTH_LONG).show();
        }
于 2012-04-08T04:14:14.390 回答
0

写入文件的机制已经很好地涵盖了,但我想添加更多关于:

我正在从数据库中提取所有内容

在这种情况下,您可以从 ListView 中获取光标,然后使用SQLiteCursor.getItemAtPosition().

private String getCsvFromViewCursor(ListView myListView) {
    StringBuilder builder = new StringBuilder();
    SQLiteCursor cursor;
    builder.append("\"Field 1\",\"Field 2\"\n");
    for (int i = 0; i < myListView.getCount(); i++ ){
        cursor = (SQLiteCursor) myListView.getItemAtPosition(i);
        builder.append("\"").append(cursor.getString(0)).append("\",");
        builder.append("\"").append(cursor.getString(1)).append("\"\n");
    }
    return builder.toString();
}
于 2016-06-21T17:57:00.957 回答