zoukankan      html  css  js  c++  java
  • Android下的数据储存方式( 二)

    在上一篇文章中我们介绍了SharedPreferences的使用方法。

    今天我们继续介绍另一种储存数据的方式:使用内部储存和外部储存

    每一个Android设备都拥有两个数据储存区域:外部储存和外部储存

    那么我们应该采用哪种储存方式呢?

    我们先对比一下这两种储存方式的不同:

    内部储存:

    • 总是可用的
    • 保存在这里的文件只能被你的app访问
    • 当程序被卸载的时候,系统会删除所有属于该应用的文件

      当你不希望你的文件被其他人或应用访问到的时候,内部储存是最好的选择

    外部储存:

    • 当sd卡被用户卸载的时候不可用,因此可能需要做额外的检测动作
    • 外部储存可被所有人或应用读取,安全性差
    • 当应用被卸载的时候,只有保存在通过getExternalFilesDir()获取的路径上的文件被删除

      当储存空间紧缺和文件的访问不需要被限制的时候,外部储存是最好的选择

    保存文件到内部储存

    文件的操作主要用到java的io包里面的类。

    要获取属于你的程序的储存空间,可以使用下面的两个方法:

    getFilesDir()

              返回一个File类型的内部储存路径

    getCacheDir()

              返回一个File类型的内部临时储存路径

    先看一下运行效果:

    a

    运行完毕到Eclipse的ddms视图就可以看到文件已经被写入:

    image

    详细代码:

    package com.whathecode.storageoptinos;
    
    import java.io.FileOutputStream;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity
    {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		final EditText namefield = (EditText) findViewById(R.id.username);
    		final EditText agefield = (EditText) findViewById(R.id.age);
    
    		Button btnWrite = (Button) findViewById(R.id.write);
    
    		SharedPreferences spf = getSharedPreferences("record", MODE_PRIVATE);
    		// 获取编辑器
    		final SharedPreferences.Editor editor = spf.edit();
    
    		btnWrite.setOnClickListener(new View.OnClickListener()
    		{
    
    			@Override
    			public void onClick(View v)
    			{
    				String filename = "person.txt";
    				// File file = new File(getBaseContext().getFilesDir(),
    				// filename);
    
    				String username = namefield.getText().toString();
    				String age = agefield.getText().toString();
    
    				try
    				{
    					FileOutputStream openFileOutput = openFileOutput(filename,
    							Context.MODE_PRIVATE);
    
    					openFileOutput.write(username.getBytes());
    					openFileOutput.write(age.getBytes());
    
    					openFileOutput.close();
    
    					Toast.makeText(getBaseContext(),
    							"file saved at " + getFilesDir().toString(),
    							Toast.LENGTH_LONG).show();
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    }

    保存文件到外部储存

    和内部储存不同,写文件到外部储存需要在AndroidManifest文件中获取相应的权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    当你的程序获得了写外部储存的权限的时候,同时隐式地获得读的权限,因此不需要另外添加读的权限。

    运行结果:

    a

    程序代码:

    package com.whathecode.storageoptinos;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity
    {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		final EditText namefield = (EditText) findViewById(R.id.username);
    		final EditText agefield = (EditText) findViewById(R.id.age);
    
    		Button btnWrite = (Button) findViewById(R.id.write);
    
    		btnWrite.setOnClickListener(new View.OnClickListener()
    		{
    
    			@Override
    			public void onClick(View v)
    			{
    				String filename = "person.txt";
    
    				String externDir = getExternalFilesDir(null).toString();
    				// 准备数据写入
    				String username = namefield.getText().toString();
    				String age = agefield.getText().toString();
    
    				// 判断sd卡是否挂载,sd卡存在则开始写入文件
    				if (Environment.getExternalStorageState().equals(
    						Environment.MEDIA_MOUNTED))
    				{
    					try
    					{
    						FileOutputStream fos = new FileOutputStream(new File(
    								externDir, filename));
    						fos.write(username.getBytes());
    						fos.write(age.getBytes());
    
    						fos.close();
    
    						Toast.makeText(getBaseContext(),
    								"file saved at " + externDir, Toast.LENGTH_LONG)
    								.show();
    					} catch (Exception e)
    					{
    						e.printStackTrace();
    					}
    
    				} else
    				{
    					Toast.makeText(getBaseContext(), "SD卡不存在",
    							Toast.LENGTH_SHORT).show();
    				}
    
    			}
    		});
    
    	}
    }

    文件保存路径:

    image

  • 相关阅读:
    初识Node
    从服务器获取信息的方式
    引用对象的指针传递
    使用定时器来控制一次执行的任务数量
    JS字符串拼接的方法及性能比较
    提升JS比较效率的方式
    DOM访问优化
    JS数据存取效率的优化
    JS脚本加载顺序及优化
    python 基本用法
  • 原文地址:https://www.cnblogs.com/ai-developers/p/4246204.html
Copyright © 2011-2022 走看看