外置存储:(存储在mnt的sd卡下面) 

 1)外置sdcard存储相关FAQ? 

 a)存储状态(是否已经挂载SDCARD) 

String state01=Environment.getExternalStorageState();查询是否有SD卡 
 返回MOUNTED是表示有的意思 

boolean state02=Environment.isExternalStorageRemovable();表示SD卡是否插入 
 返回false表示没有删除 

if(!(Environment.MEDIA_MOUNTED.equals(state01)||!state02))判断安装是否成功  toast... 



 b)存储路径 (存储路径)(一般是在mnt/sdcard/下) 

File sdcard=Environment.getExternalStorageDirectory();获得应用程序的公有存储目录 

File picSdcard=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)获得照片的公有目录 

获得应用程序私有存储目录(必须具备写sdcard权限): 

File privateDir=getExternalFilesDir(Environment.DIRECTORY_PICTURES);获得私有照片的目录 

File cacheDir=getExternalCacheDir();//获得私有的缓存目录 

 

 c)存储空间(是否有空间继续存储) 

StatFs(获得空间大小) 

StatFs s=new StatFs(sdcard.getPath()); 

int blockCount=s.getBlockCount();获得总块数 

int aBlocks=s.getAvailableBlocks();获得可用块 

int fBlocks=s.getFreeBlocks();//>=aBlocks获得空闲块,大于等于可用块aBlock 

int size=s.getBlockSize();获得块大小,值是一个字节单位 

 d)存储权限 (是否有权限) 

在清单文件中写:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>,来获得权限 

 

 e)存储实现 (相关API及相关步骤) 

if(aBlocks*size<data.getBytes().length)判断是否内存够不够 

 

写入内存 

String a = "hello";定义了一个字符串写入内存 

OutputStream out=new FileOutputStream(new File(sdcard,"a1.text")); 

out.write(a.getBytes()); 

out.close(); 



读取内存内容 

File sdcard = Environment.getExternalStorageDirectory();获得公有内存的目录 

InputStream innew FileInputStream(new File(sdcard, "a1.text")); 

byte buf[] = new byte[(in.available())]; 

int len = in.read(buf); 

String s= new String(buf,0,len) 

in.close() 

Toast.makeText(this, s , 0).show();成功了就吐司出内容 

 

 --------------------------------------------------------------------------------- 



 内置sdcard存储(内部存储:内部存储的数据在应用卸载时会被删除,存储在data下) 



File file=getFilesDir();//data/data/项目包/file,获得路径 

File cache=getCacheDir();//data/data/项目包/cache获得路径 

 1)内置sdcard存储相关FAQ? 



 a)存储目录(Context) 

 b)存储大小(StatFS) 

 c)存储实现(存储在data\data项目包下) 

写入内容 

OutputStream out=openFileOutput("h1.txt",Context.MODE_APPEND)方法表示打开文件,并设置模式为追加,没有文件则自己创建 

out.write("helloworld".getBytes());写入内容 

读取内容 

InputStream in=openFileInput("h1.txt");打开文件读取 

byte buf[]=new byte[in.available()] 

int len=in.read(buf); 

String s= new String(buf,0,len) 

in.close()释放资源 



 ---------------------------------------------------------------------------------- 

 偏好设置 

 偏好设置相关API? 

 Context 

 SharedPreferences 

 Editor(写入数据时要借助此对象) 



写入内容: 

SharedPreferences sp=getSharedPreferences("user",//文件名,默认为xmlContext.MODE_PRIVATE//设置使用不能追加); 

Editor et=sp.edit();获得编辑的方法 

et.putBoolean("isUsed", true);写入一个boolena类型的内容 

et.commit();持久化数据,类似于刷新 

读取内容: 

SharedPreferences sp=getSharedPreferences("user",//文件名,默认为xmlContext.MODE_PRIVATE); 

boolean flag=sp.getBoolean("isUsed", false);读取IsUsed的内容,如果没有就返回默认值false 

 



 --------------------------------------------------------------------------------------- 



 sqlite数据库 



 创建数据库:onCreateDB 

private SQLiteDatabase sdb; 

sdb=openOrCreateDatabase("external.db",//name,Context.MODE_PRIVATE,//model,null)方法表示为打开或创建 



 创建表:onCreateTable 

String sql="create table if not exists contact("+ "_id integer primary key autoincrement," 

+ "phone text not null,"+ "name text)";创建表,如果不存在的话 ,id:表示如果没有输入id则会自动增加 

phone不能为空, 

sdb.execSQL(sql);//发送SQL语句 



 写入插入:onInsert 

String sql="insert into contact values + "(null,'138','B')"; 

sdb.execSQL(sql)发送SQL语句 



 查询:onSelect 

String sql="select * from contact"; 

Cursor c=sdb.rawQuery(sql, null);把内容按光标读取,表示一行一行读取 

if(c==null){Log.i("TAG", "query error");return;} 

if(!c.moveToFirst()){ Log.i("TAG", "no data"); return;} 

do{//循环一次取一行 
  循环取出 

Log.i("TAG", 

 c.getInt(c.getColumnIndex("_id"))+"/"+ 

 c.getString(c.getColumnIndex("phone"))+"/"+ 

 c.getString(c.getColumnIndex("name"))); 

}while(c.moveToNext());//继续移动指针 

c.close(); 

第二种:跳转到另一个class,在listView上显示 

startActivity(new Intent(this,OtherActivity.class)); 



 

 修改数据:onUpdate 

String sql="update contact set name=?"+ " where phone=?"; 

sdb.execSQL(sql, new String[]{"xuhu","139"}); 



 删除表中数据:onDelete 

String sql="delete from contact where phone=?"; 

sdb.execSQL(sql,new String[]{"139"}); 

String sql="drop table if exists contact";删除表结构 







 VO(值对象)封装 





 -------------------------------------------------------------------------------------------------------------------------