数据存储:Internal Storage与Shared Preferences(一)

2015-01-27 06:10:50 · 作者: · 浏览: 20

Android提供五种持久化数据存储的方式:Shared Preferences、Internal Storage、External Storage、SQLite Databases和Network Connection。文章如题讲的是Internal Storage和Shared Preferences。

Internal Storage:通过文件的形式将数据保存到手机内部存储空间中,并且这些文件是私有的,其他程序无法访问。当卸载掉程序之后,这些文件也会被相应移除。读写操作:

①写数据时,调用openFileOutput(String name, int mode)方法获得一个输出流,参数一是输出的文件名而输出文件的路径是系统自定的/data/data/.../files/;参数二是操作模式,主要有两种模式:Context.MODE_PRIVATE,覆盖原有的文件;Context.MODE_APPEND,内容追加到原来的文件上。

②读数据时,调用openFileInput(String name)方法获得一个输入流,由于路径由系统自定,所以参数就是要读取数据的文件名

具体操作就是Java的I/O操作,可以参见http://blog.csdn.net/leelit/article/details/40040803

实例一:通过Internal Storage以文件形式存取数据

①布局文件

  

    
   

    
   

    
   

    
   

    
   

    
   


  
②Activity

public class MainActivity extends ActionBarActivity {

	private EditText editText; // 输入文件内容
	private EditText editText1; // 输入文件名
	private Button button;
	private Button button1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		editText = (EditText) findViewById(R.id.edittext);
		editText1 = (EditText) findViewById(R.id.edittext1);
		button = (Button) findViewById(R.id.button);
		button1 = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String data = editText.getText().toString();
				if (data != null && !data.equals("")) {
					saveDataToFile(data);
					Toast.makeText(MainActivity.this,
							"succeeded in saving data", Toast.LENGTH_LONG)
							.show();
				}
			}
		});
		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String fileName = editText1.getText().toString();
				if (!TextUtils.isEmpty(fileName)) {
					String data = getDataFromFile(fileName);
					System.out.println(data);
				}
			}
		});
	}

	// 调用openFileOutput方法获得一个输出流,输出流的路径系统自定,文件名为第一个参数
	private void saveDataToFile(String data) {
		FileOutputStream fos = null;
		BufferedWriter bw = null;
		try {
			// 直接指定保存的文件名为leelit,第二个参数为保存方式
			fos = openFileOutput("leelit", Context.MODE_PRIVATE);
			bw = new BufferedWriter(new OutputStreamWriter(fos));
			bw.write(data);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (bw != null)
					bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	// 调用openFileInput方法获得一个输入流,由于路径由系统自定,所以只需指明文件名
	private String getDataFromFile(String fileName) {
		StringBuilder builder = new StringBuilder();
		FileInputStream fis = null;
		BufferedReader br = null;

		try {
			fis = openFileInput(fileName);
			br = new BufferedReader(new InputStreamReader(fis));
			String line = "";
			while ((line = br.readLine()) != null)
				builder.append(line);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("File Not Found");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.pr