`

android 存储数据与文件

阅读更多

    Android提供了几种数据或文件的存储方式:

    读写sdcardSharedPreference, 数据库

下面初步了解一下。

一.读写sdcard。

    android中文件读写到sdcard与一般java思路一样,通过I/O流进行读写。下面直接代码:

   添加权限:

 

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

 

public class SavecontentService {
	private Context context;
   public SavecontentService(Context context){
	   this.context=context;
   }
//向sdcard中存储文件(filename为保存的文件名,content为保存在文件中的内容)
   public boolean saveContentToSdcard(String filename,String content){
	   boolean flag=false;
	   FileOutputStream fileOutputStream=null;
	   //获得存储卡所在路径
	   File file=new File(Environment.getExternalStorageDirectory(),filename);
	   //判断sdcard是否可用
	   if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
		   try {
			fileOutputStream=new FileOutputStream(file);
			fileOutputStream.write(content.getBytes());
			flag=true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fileOutputStream!=null){
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	   }
	   return flag;
   }
//从sdcard中获取文件
   public String getContentFromSdcard(String filename){
	   FileInputStream fileInputStream=null;
	   //缓存的流,和磁盘无关,不需要关闭
	   ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
	   File file=new File(Environment.getExternalStorageDirectory(),filename);
	   if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
		   try {
			fileInputStream=new FileInputStream(file);
			int len=0;
			byte data[]=new byte[1024];
			while((len=fileInputStream.read(data))!=-1){
				outputStream.write(data,0, len);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fileInputStream!=null){
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	   }
	   return new String(outputStream.toByteArray());
   }
}

 

 

 二.SharedPreference。

       它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下

 

public class MySharedPreference {
   private Context context;
   public MySharedPreference(Context context){
	   this.context=context;
   }
//保存信息
   public boolean saveContent(String username,String password){
	   boolean flag=false;
	   SharedPreferences sharedPreference=context.getSharedPreferences("userinfo",Context.MODE_PRIVATE);
	   //对数据进行编辑
	   SharedPreferences.Editor edit=sharedPreference.edit();  //获取编辑器
	   edit.putString("username", username);
	   edit.putString("password",password);
	   flag=edit.commit(); //将数据保存至存储介质
	   return flag;
   }
//获取信息
   public HashMap<String,Object> getConten(){
	   HashMap<String,Object> map=new HashMap<String, Object>();
           //userinfo为文件的名称,名称不用带后缀,后缀会由Android自动加上  Context.MODE_PRIVATE为文件的操作模式
	   SharedPreferences sharedPreference=context.getSharedPreferences("userinfo",Context.MODE_PRIVATE);
	   String uname=sharedPreference.getString("username","");  //获取不到则默认为空
	   String pwd=sharedPreference.getString("password","");
	   map.put("username",uname);
	   map.put("password",pwd);
	   return map;
   }
}

 三.操作数据库。

     android提供的SQLite是一个很小的关系数据库。我们通常通过SQLiteOpenHelper这个辅助类来管理数据库的创建和版本。

     所有继承SQLiteOpenHelper的类必须实现下面的构造函数:

public DatabaseHelper(Context context,String name,CursorFactory factory,int version)

     context ——上下文对象。name—— 数据库名称。factory—— 数据库游标工厂。version—— 数据库版本

该类的方法:

     getReadableDatabase()  getWriteDatabase() 通过这两个方法创建或打开一个可以读写的数据库,返回SQLiteDatabase对象对数据库进行操作。

 

public class DbOpenHelper extends SQLiteOpenHelper{
    private static String name="myDb.db";  //数据库名
    private static int version=1;   //数据库版本号    
	public DbOpenHelper(Context context ) {
		super(context, name, null, version);
	}
       //数据库创建时 第一次被调用,完成数据表的创建
	@Override
	public void onCreate(SQLiteDatabase db) {
	//支持数据库类型,整形,字符串类型,日期类型,二进制的数据类型
       String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";	
	db.execSQL(sql);
	}
        //升级数据库版本方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql="alert table person add sex varchar(8)";  //向表中插入一个属性
		db.execSQL(sql);
	}
}

 对数据库操作的类: 

     SQLiteDatabase有对应的方法进行数据库才操作(参考API)

 

   

public class DbDemo{
    DbOpenHelper helper=null;
    public DbDemo(Context context){
    	helper=new DbOpenHelper(context);
    }
	//增加数据
	public boolean addObject(String[] args) {
		boolean flag=false;
		SQLiteDatabase database=helper.getWritableDatabase();
		String sql="insert into person(name,address) values(?,?)";
		database.execSQL(sql,args);
		flag=true;
		database.close();
		return flag;
	}

	//删除数据
	public boolean deleteObject(String[] args) {
		boolean flag=false;
		SQLiteDatabase database=helper.getWritableDatabase();
		String sql="delete from person where id=?";
		database.execSQL(sql,args);
		flag=true;
		database.close();
		return flag;
	}

	//更新数据
	public boolean updateObject(String[] args) {
		boolean flag=false;
		SQLiteDatabase database=helper.getWritableDatabase();
		String sql="update person set name=?,address=?";
		database.execSQL(sql);
		flag=true;
		database.close();
		return flag;
	}

	//获取一条记录
	public Map<String, String> getObject(String[] args) {
		Map<String,String> map=new HashMap<String, String>();
		SQLiteDatabase database=helper.getReadableDatabase(); //获取数据库
		String sql="select * from person where id=?";
		Cursor cursor=database.rawQuery(sql, args);  //获取游标
		while(cursor.moveToNext()){
			for(int i=0;i<cursor.getColumnCount();i++){
                                //获取列名
				String name=cursor.getColumnName(i); 
                                //获取该列对应的数据
				String value=cursor.getString(cursor.getColumnIndex(name));
				map.put(name, value);
			}
		}
		return map;
	}

	//获取一组数据
	public List<Map<String, String>> getlistObject(String[] args) {
		List<Map<String,String>> list=new ArrayList<Map<String,String>>();
		SQLiteDatabase database=helper.getReadableDatabase();
		String sql="select * from person";
		Cursor cursor=database.rawQuery(sql, args);
		while(cursor.moveToNext()){
			Map<String, String> map=new HashMap<String, String>();
			for(int i=0;i<cursor.getColumnCount();i++){
				String name=cursor.getColumnName(i);
				String value=cursor.getString(cursor.getColumnIndex(name));
				map.put(name, value);
			}
			list.add(map);
		}
		return list;
	}
}

 测试类:

    

public class MyTest extends AndroidTestCase{
	private final String TAG="MyTest";
    public MyTest(){
    	
    }
  
    /*
     * 存储数据到数据库
     */
    public void creartDb(){
    	DbOpenHelper openhelper=new DbOpenHelper(getContext());
    	openhelper.getWritableDatabase();
    }
    public void addobject(){
    	DbDemo service=new DbDemo(getContext());
    	String[] objects={"fb","湖南"};
    	boolean flag=service.addObject(objects);
    	Log.i(TAG, "---->>"+flag);
    }
}

 

 

 

 

 

分享到:
评论

相关推荐

    老罗android视频开发源码和ppt--android存储数据和文件.rar

    "老罗android视频开发源码和ppt--android存储数据和文件.rar"这个压缩包提供的是关于Android数据存储和文件操作的教学资源,包括视频课程和PPT讲义,由知名的Android讲师罗升阳(老罗)编撰。 首先,我们来看一下...

    Android存储字符串数据到txt文件

    "Android存储字符串数据到txt文件" Android存储字符串数据到txt文件是Android开发中的一种常见需求,对于大多数开发者来说,存储字符串数据到txt文件是一种非常有用的功能。今天,我们将详细介绍如何在Android中...

    Android本地数据存储之文件存储读写

    在Android应用开发中,本地数据存储是至关重要的一个环节,特别是在处理用户数据或者应用程序需要持久化数据时。本文将深入探讨Android系统中的文件存储机制,包括如何读取、写入、重写和删除.txt格式的文件。理解...

    Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储)

    本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1. SharedPreferences存储 SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存应用...

    Android实现数据存储技术

    Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 SharedPreferences 存储数据 ...

    Android数据存储与访问

    在Android开发中,数据存储与访问是至关重要的环节,它涉及到应用程序如何持久化用户数据、配置信息以及应用程序内部状态。本教程将深入探讨Android中的几种主要数据存储方式,包括Shared Preferences、SQLite数据库...

    Android不需要文件存储权限将文件保存至手机

    在Android系统中,传统的文件存储方式通常需要应用获取相应的文件读写权限,以便在外部存储(如SD卡)上保存和访问数据。然而,随着Android系统的更新,特别是自Android 6.0(Marshmallow)引入运行时权限管理以来,...

    android 文件存储

    总结起来,Android文件存储涉及多种策略,根据数据类型、访问需求和安全性选择合适的存储方式。理解并熟练掌握这些技术对于开发高效、稳定的应用至关重要。在实际开发中,还需要注意数据备份、权限管理和文件清理等...

    Android案例:备忘录。利用数据存储的文件内部存储

    本案例是关于如何使用Android的数据存储机制,特别是文件内部存储,来创建一个简单的备忘录应用程序。以下是这个案例涉及到的关键知识点: 1. **数据存储方式**: - Android提供了多种数据存储方式,如...

    android数据存储相关代码

    在Android系统中,数据存储是应用程序管理用户数据的关键部分。Android提供了多种数据存储方式,以适应不同的需求,如轻量级的数据保存、持久化的数据存储等。以下将详细阐述Android数据存储的相关知识点。 1. ...

    将Excel数据导入android数据库DB文件

    在Android开发中,数据库是存储和管理应用数据的重要手段,而SQLite是最常用的关系型数据库系统。本教程将指导你如何将Excel数据导入到Android应用的SQLite数据库.db文件中,以便在应用运行时能够访问和操作这些数据...

    Android数据存储SQLite.docx

    在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 SQLite 数据库存储等。本文将详细介绍 Android 中的数据存储方式,特别是 SQLite 数据库存储。 一、SharedPreferences ...

    android数据访问与存储

    在Android系统中,数据访问与存储是开发过程中不可或缺的一部分,它涉及到应用程序的数据持久化、用户数据的保存以及数据的安全管理。本章节将深入探讨Android中常见的数据存储方式,包括内部存储、外部存储、SQLite...

    Android将数据导出为excel文件的方法

    在Android开发中,有时我们需要将应用中的数据导出到Excel文件,以便用户可以方便地查看、编辑或分享。本文将详细介绍如何在Android中实现这一功能,主要涉及的技术点包括文件操作、数据序列化以及第三方库的使用。 ...

    【Android 文件管理】分区存储 ( 修改与删除图片文件 )

    在Android系统中,文件管理是应用程序开发者必须掌握的重要技能之一,尤其是在处理用户数据,如图片文件时。本文将深入探讨Android的分区存储机制,并详细讲解如何修改和删除图片文件。 一、Android分区存储概述 ...

    Android读取本地json文件的方法(解决显示乱码问题)

    在Android应用开发中,有时我们需要从本地存储的JSON文件中读取数据,这通常涉及到文件I/O操作和字符编码处理。以下将详细讲解如何在Android中读取本地JSON文件,并解决可能出现的显示乱码问题。 1. **读取本地JSON...

    android txt文件保存读取操作

    在Android平台上,对TXT文件进行保存和读取是常见的数据持久化操作,尤其适用于存储少量结构化的文本数据。本文将详细讲解如何在Android应用中实现TXT文件的保存和读取功能,以及涉及到的相关知识点。 首先,我们...

    Android数据储存

    本主题将深入探讨“Android数据储存”,特别是针对非图片数据的处理,如将JSON数据序列化为对象,并存储到内存或文件系统中,以减少不必要的网络通信。 一、Android数据存储方式 1. SharedPreferences:适用于存储...

    android数据存储的四种方式

    Android提供了对文件系统的访问权限,开发者可以直接操作文件来存储数据。文件存储可以分为内部存储和外部存储。内部存储的数据对于应用是私有的,只有应用本身可以访问;外部存储则允许其他应用访问,通常用于存储...

    Android存储数据之一:文件保存与读取.pdf

    在Android开发中,文件的保存与读取是数据持久化的基础操作,涉及到的知识点主要包含以下几个方面: 1. Android文件系统结构:Android系统中,每个应用运行在独立的沙盒中,拥有自己私有的文件系统目录。应用的私有...

Global site tag (gtag.js) - Google Analytics