在android上保存一个ArrayList到文件

我有一个ArrayList充满了string,用户填充它以在ListView中的不同活动中使用,以查看他们已经保存的string。 我想要他们填充的ArrayList被保存,但我很迷茫,如何得到它的工作。 我试过FileOutputStream,SharedPreferences。 我看了很多例子。

例如我有

ArrayList<String> give = new ArrayList<String>(); 

并保存arraylist的尝试过的东西

 FileOutputStream fos = openFileOutput(MYFILENAME, Context.MODE_PRIVATE); fos.write(give.getBytes()); fos.close(); 

但是这根本不起作用

Solutions Collecting From Web of "在android上保存一个ArrayList到文件"

这里有一些代码可以将一个可序列化的对象写入文件,这也许是你需要的。 testing出来和ArrayList,它工作正常。 您也可以修改输出,而不是将其写入文件,您可以使用extras或bundle将其传递给一个活动。 我用这个方法的android版本<3.0。

读取已经包含序列化对象的文件:

 String ser = SerializeObject.ReadSettings(act, "myobject.dat"); if (ser != null && !ser.equalsIgnoreCase("")) { Object obj = SerializeObject.stringToObject(ser); // Then cast it to your object and if (obj instanceof ArrayList) { // Do something give = (ArrayList<String>)obj; } } 

将对象写入文件使用:

 String ser = SerializeObject.objectToString(give); if (ser != null && !ser.equalsIgnoreCase("")) { SerializeObject.WriteSettings(act, ser, "myobject.dat"); } else { SerializeObject.WriteSettings(act, "", "myobject.dat"); } 

序列化对象的类:

 import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; import java.io.Serializable; import android.content.Context; import android.util.Base64InputStream; import android.util.Base64OutputStream; import android.util.Log; /** * Take an object and serialize and then save it to preferences * @author John Matthews * */ public class SerializeObject { private final static String TAG = "SerializeObject"; /** * Create a String from the Object using Base64 encoding * @param object - any Object that is Serializable * @return - Base64 encoded string. */ public static String objectToString(Serializable object) { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { new ObjectOutputStream(out).writeObject(object); byte[] data = out.toByteArray(); out.close(); out = new ByteArrayOutputStream(); Base64OutputStream b64 = new Base64OutputStream(out,0); b64.write(data); b64.close(); out.close(); return new String(out.toByteArray()); } catch (IOException e) { e.printStackTrace(); } return null; } /** * Creates a generic object that needs to be cast to its proper object * from a Base64 ecoded string. * * @param encodedObject * @return */ public static Object stringToObject(String encodedObject) { try { return new ObjectInputStream(new Base64InputStream( new ByteArrayInputStream(encodedObject.getBytes()), 0)).readObject(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * Save serialized settings to a file * @param context * @param data */ public static void WriteSettings(Context context, String data, String filename){ FileOutputStream fOut = null; OutputStreamWriter osw = null; try{ fOut = context.openFileOutput(filename, Context.MODE_PRIVATE); osw = new OutputStreamWriter(fOut); osw.write(data); osw.flush(); //Toast.makeText(context, "Settings saved",Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); // Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show(); } finally { try { if(osw!=null) osw.close(); if (fOut != null) fOut.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * Read data from file and put it into a string * @param context * @param filename - fully qualified string name * @return */ public static String ReadSettings(Context context, String filename){ StringBuffer dataBuffer = new StringBuffer(); try{ // open the file for reading InputStream instream = context.openFileInput(filename); // if file the available for reading if (instream != null) { // prepare the file for reading InputStreamReader inputreader = new InputStreamReader(instream); BufferedReader buffreader = new BufferedReader(inputreader); String newLine; // read every line of the file into the line-variable, on line at the time while (( newLine = buffreader.readLine()) != null) { // do something with the settings from the file dataBuffer.append(newLine); } // close the file again instream.close(); } } catch (java.io.FileNotFoundException f) { // do something if the myfilename.txt does not exits Log.e(TAG, "FileNot Found in ReadSettings filename = " + filename); try { context.openFileOutput(filename, Context.MODE_PRIVATE); } catch (FileNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { Log.e(TAG, "IO Error in ReadSettings filename = " + filename); } return dataBuffer.toString(); } } 

您可以使用SharedPreferences下面有一个示例链接

将ArrayList保存到SharedPreferences