Android 数据存储——上

android存储方式

Android 数据存储——上_第1张图片

SP存储理解

SP存储专门用来存储一些单一的小数据

存储数据的类型:boolean,float,int,long,string

数据保存的路径:/data/data/packageName/shared_prefs/yyy.xml

可以设置数据只能是当前应用读取,不能被别的应用读取

应用卸载时会删除此数据

相关API:

Android 数据存储——上_第2张图片

示例:

public class SqlActivity extends Activity {

	private EditText key;
	private EditText value;
	private Button save;
	private Button read;
	private SharedPreferences sp=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sql);
		
		key=(EditText) findViewById(R.id.et_key);
		value=(EditText) findViewById(R.id.et_value);
		save=(Button) findViewById(R.id.sp_save);
		read=(Button) findViewById(R.id.sp_read);
		
		//1.得到sp对象
		sp=getSharedPreferences("yabushan", Context.MODE_PRIVATE);
	}
	
	//保存
	public void sp_save(View v){
		//2.得到Edit对象
		Editor editor=sp.edit();
		//3.得到输入的key/value
		String keysString=key.getText().toString();
		String namesString=value.getText().toString();
		
		//4.使用edit保存key-value
		editor.putString(keysString,namesString).commit();
		//5.给出操作提示
		Toast.makeText(this, "保存成功", 0).show();
	}
	
	//读取
	public void sp_read(View v){
		//1.读取key
		String kString=key.getText().toString();
		//2.根据key读取对应的value值
		
		String value=sp.getString(kString, null);
		
		//3.显示
		if(value==null){
			Toast.makeText(this, "没有找到对应的value", 0).show();
		}else{
			this.value.setText(value);
		}
	}
	
	
}

手机内部存储

内部存储理解

应用运行需要的一些较大的数据或图片可以用文件保存到手机内部;

文件类型:

任意

数据保存的路径:/data/data/projectPackage/files/

可以设置数据只能是当前应用读取,而别的应用不可以读取

应用卸载时会删除此数据


相关API:

/**
	 * 手机内部保存
	 * @throws IOException 
	 */
	public void save(View v) throws IOException{
		//1.得到InputStream-->读取assets下的logo.png
			//得到AssetManager
		AssetManager manager=getAssets();
			//读取文件	
		System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>"+getFilesDir().getAbsolutePath());
		InputStream iStream=manager.open("logo.png");
		//2.得到outputstream-->/data/data/packageNames/files/logo.png
		FileOutputStream foStream=openFileOutput("logo.png", Context.MODE_PRIVATE);
		//3.边读边写
		byte[] buffer=new byte[1024];
		int len=-1;
		while((len=iStream.read(buffer))!=-1){
			foStream.write(buffer,0,len);
			
		}
		foStream.close();
		iStream.close();
		//4.提示
		Toast.makeText(this, "保存完成", 0).show();
	}
	/**
	 * 手机内部存储读取
	 * @param v
	 */
	public void read(View v){///data/data/packageNames/files/logo.png
		//1.得到图片文件的路径
			//  /data/data/packageNames/files
		String filesPthString=getFilesDir().getAbsolutePath();
		String imagePathString=filesPthString+"/logo.png";
		//2.读取加载图片文件到bitmap对象
		Bitmap bitmap=BitmapFactory.decodeFile(imagePathString);
		//3.将其设置到imageView中显示
		iv_if.setImageBitmap(bitmap);
	}

SD卡外部存储

理解:

应用运行用到的数据文件(如图片)可以保存到sd卡中

文件类型:任意

数据保存的路径:

    路径1:/storage/sdcard/Android/data/packageName/files/

    路径2:/storage/sdcard/xxx/

路径1:其他应用可以访问,应用卸载时删除

路径2:其他应用可以访问,应用卸载时不会删除

必须保证sd卡挂载在手机上才能读写,否则不能操作

相关API:




路径方式一:

	/**
	 * SD卡外部存储保存
	 * @throws IOException 
	 */
	
	public void sd_save(View v) throws IOException{
		//1.判断sd卡状态,如果是挂载状态才继续,否则提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名/内容
			String filename=key.getText().toString();
			String content=value.getText().toString();
			//3.得到指定文件的outputStream
				//1.得到sd卡夏的files路径
			String fileSpath=getExternalFilesDir(null).getAbsolutePath();
				//2.组成完整路径
			String filepath=fileSpath+"/"+filename;
				//3.创建FileOutputStream
			FileOutputStream fos=new FileOutputStream(filepath);
			//4.写数据
			fos.write(content.getBytes("utf-8"));
			fos.close();
			//5.提示
			Toast.makeText(this, "保存完成", 0).show();
			
			
		}else{
			Toast.makeText(this, "sk卡没有挂载", 0).show();
		}
	}
	
	/**
	 * sd卡外部存储读取
	 * @throws IOException 
	 */
	public void sd_read(View v) throws IOException{
		//1.判断sd卡状态,如果是挂载的状态才继续,否则给出提示
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//2.读取输入的文件名
			String fileName=key.getText().toString();
			//3.得到指定的InputStream
				//3.1得到sd卡下的files路径
			String filesPaht=getExternalFilesDir(null).getAbsolutePath();
				//3.2组成完整路径
			String filePath=filesPaht+"/"+fileName;
				//3.3创建fileInputStream
			FileInputStream fis=new FileInputStream(filePath);
			
			//4.读取数据
			ByteArrayOutputStream baos=new ByteArrayOutputStream();
			byte[] buffer=new byte[1024];
			int len=-1;
			while((len=fis.read(buffer))!=-1){
				baos.write(buffer,0,len);
			}
			String contentString=baos.toString();
				
			//5.显示
			value.setText(contentString);
		}else{
			Toast.makeText(this, "SD卡没有挂载", 0).show();
		}
	}


你可能感兴趣的:(Android 数据存储——上)