Efficientway保存/加载列表项到文本文件android

时间:2016-06-20 07:15:42

标签: java android mobile

大家好,所有人都有一种有效的方法来保存列表视图数组项并将其加载到文本文件中 如何将保存和加载集成到此代码中?

我有一些方法可以保存为文本。

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

我想要做的就是有能力保存并加载我添加到列表视图的列表项目任何帮助将不胜感激。我输了。

提前感谢你们。

public class ListtestActivity extends Activity {
ArrayAdapter<String> m_adapter;
ArrayList<String> m_listItems = new ArrayList<String>();


Button bt;
Button save;
Button Loadtxt;
EditText et;
TextView tv;
ListView lv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 save = (Button) findViewById(R.id.button2);
Loadtxt = (Button) findViewById(R.id.button3);
bt = (Button) findViewById(R.id.button1);
et = (EditText) findViewById(R.id.editText1);
tv = (TextView) findViewById(R.id.textView1);
lv = (ListView) findViewById(R.id.listView1);
m_adapter = new ArrayAdapter<String>   (this,android.R.layout.simple_list_item_1, m_listItems);

 lv.setAdapter(m_adapter);
final String input = et.getText().toString();

bt.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

    String input = et.getText().toString();
    if(null!=input&&input.length()>0){     

    m_listItems.add(input);

    m_adapter.notifyDataSetChanged();

  }

save.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {



  }

 Loadtxt.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {



 }
}
});

5 个答案:

答案 0 :(得分:0)

试试这个,它可能对你有所帮助

public  void writeToFile(String fileName)
{
    try {
        final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/folderName/" );

        if (!dir.exists())
        {
            if(!dir.mkdirs()){
                Log.e("TAG","could not create the directories");
            }
        }

        final File myFile = new File(dir, fileName + ".txt");
        if (!myFile.exists())
            myFile.createNewFile();



        FileWriter writer = new FileWriter(myFile);
        for(String str: m_listItems) {
            writer.write(str);
        }
        writer.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

如果您想要快速而强大的解决方案,可以使用Java对象序列化。但是,您编写的文件将不再是人类可读的,因为它将以二进制格式存储。

http://www.vogella.com/tutorials/JavaSerialization/article.html

我说健壮,因为今天你使用的是 ArrayList&lt; String&gt; 。明天,如果您想将其更改为 ArrayList&lt; MyOwnClass&gt; ,您仍然可以使用序列化选项而无需任何更改来保存和加载对象。

如果你想使用像序列化这样强大的东西,但仍然保持人类可读性,你可以使用像Gson这样的JSON库,并将内容直接传输到文件中。

https://stackoverflow.com/a/29319491/1364747

答案 2 :(得分:0)

Simple XML Framework使您可以非常轻松地将对象序列化为XML格式的存储文件。

Apache CSV库使得以逗号分隔或制表符分隔的文件读取和写入数据变得容易。

搜索Stack Overflow以获取更多讨论和两者的示例。

答案 3 :(得分:0)

一种简单的方法是将对象列表转换为字符串,然后在需要时对其进行反序列化。你可以用Gson这样做:

转换为字符串

Gson gson = new Gson();
List<MyObject> objects = new ArrayList<>();
objects.add(...) //whatever, all your datas to save

String objectsStr = gson.toJson(objects));
//Save you string in a file or in a preference.

对象的字符串

String objectsStr = ...//get form file or prefs
Gson gson = new Gson();
List<MyObjects> list = new ArrayList< MyObjects >();
list = Arrays.asList(gson.fromJson(objectsStr, MyObjects[].class));

不要忘记在班级中标记可序列化字段:

public class MyObject {

    @SerializedName("field1")
    @Expose
    private String filed1;
    @SerializedName("field2")
    @Expose
    private String field1;

}

答案 4 :(得分:0)

protected Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    ObjectInputStream ois = new ObjectInputStream(bais);
    Object ret= ois.readObject();
    ois.close();
    return ret;
}

protected byte[] objectToBytes(Serializable object) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(object);
    oos.close();
    return baos.toByteArray();
}