这五种方式分别是:
1、SharedPreferences(偏好设置),读取XML文件
2、文件存储
(1)assets(程序内部的资源,只能读)
(2)data/data/主包名/files目录下的,能读能写 || 手机内存
(3)读SD卡中的文件,需要申请权限
3、SQLite---->http://blog.csdn.net/u013519020/article/details/52229013
4、ContentProvider
5、网络流
一、SharedPreferences(偏好设置)本身不支持写,通过Editor获得写的能力
特点:轻量级存储,存放在XML文件中,采用Key--Value存取。
文件位置:data / data / 主包名 / shared_prefs / *.XML
编译器查找方式:Window-->Show View-->--other-->File Explorer(资源管理器)
存:(权限在后面还会有介绍)
Context ctx = MainActivity.this;
//第一个参数是文件名,第二个是读写模式
SharedPreferences sp=ctx.getSharedPreferences("t05", MODE_PRIVATE);
//获得编译
Editor editor = sp.edit();
//存数据
editor.putString("", "");
editor.commit();
取:
Context ctx = MainActivity.this;
//第一个参数是文件名,第二个是读写模式
SharedPreferences sp=ctx.getSharedPreferences("t05", MODE_PRIVATE);
String s=sp.getString("key", "取不到值时的默认值");
----------------------------文件存储------------------------
A.assets(只读、不能修改或删除),这个是编译时存放的资源文件位置如图。
读取数据:
try {
//创建流
InputStream in = this.getAssets().open("文件名.扩展名");
//读出数据
Bitmap bm=BitmapFactory.decodeStream(in);
in.close();
in=null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
B.读写数据(读写手机自身内存)
位置:data/data/主包名/files目录下的 || 也可以使用context.getFilesDir().getAbsolutePath()获得内存根路径
存:
try {
OutputStream os=this.openFileOutput("文件名", MODE_PRIVATE);
os.write("wa".getBytes());
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
InputStream in=this.openFileInput("文件名");
//缓冲区
byte b[]=new byte[1024];
//创建缓存
ByteArrayBuffer ba=new ByteArrayBuffer(0);
int l;
//读
while((l=in.read(b))>-1)
{
ba.append(b,0,l);
}
//转化
String s=new String(ba.toByteArray());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
C.SDCard读写文件
(一).首先要在AndroidManifest.XML中添加权限,两种方式添加:1.傻瓜式添加
打开这个清单文件-->Permissions-->Add-->Permission(创建权限)、Uses Permission(申请/使用权限)
Name中选择: android.permission.READ_EXTERNAL_STORAGE//写权限
android.permission.WRITE_EXTERNAL_STORAGE//读权限
android.permission.MOUNT_UNMOUNT_FILESYSTEMS//创建、删除
2.牛人式添加(手敲)
(二).判断SDCard是否存在
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
File dir = Environment.getExternalStorageDirectory();
....此处省略一万个字
(五).关闭流,关闭文件,关闭一切,赋null,注意顺序。
---------------------------权限介绍-----------------------------------
权限共有四种,来自于context:
1.MODE_PRIVATE = 0
if(FileManager.getInitialize().isSdCardAvailable()){
path = FileManager.getInitialize().getSDOrCache(this, "/ambow/asso/apk/");
}
else
path = FileManager.getInitialize().getSDOrCache(this, "");
文件管理的组件
public class FileManager {
private static FileManager manager;
/**
* 有效缓存时间是3天
*/
private static final long maxCacheTime = 1000*60*60*24*15;
/**
* 构造函数
* @param context
*/
public FileManager(){
}
/**
* 单例,获取FileManager实例
* @param context
* @return
*/
public static FileManager getInitialize(){
if(manager == null)
manager = new FileManager();
return manager;
}
/**
* 获取缓存cache目录路径
* @param context 上下文
* @return
*/
public String getCacheDir(Context context, String path){
StringBuffer dir = new StringBuffer();
dir.append(context.getFilesDir().getAbsolutePath());
if(!path.startsWith("/"))
dir.append("/");
dir.append(path);
File file = new File(dir.toString());
if(!file.exists())
file.mkdirs();
return dir.toString();
}
/**
* 获取sd卡缓存路径
*
* @param path 路径
* @return
* 有sd卡的返回sd上的路径
* 没有sd卡返回null
*/
public String getSDDir(String path){
if(!isSdCardAvailable())return null;
StringBuffer dir = new StringBuffer();
dir.append(Environment.getExternalStorageDirectory());
if(!path.startsWith("/"))
dir.append("/");
dir.append(path);
File file = new File(dir.toString());
if(!file.exists())
file.mkdirs();
return dir.toString();
}
/**
* 获取缓存文件的路径
* @param path 缓存文件的路径
* @param url 保存的文件的url
* @return
*/
public String getCacheFileUrl(Context context,String path, String url){
return getSDOrCache(context,path)+formatPath(url);
}
/**
* 获取缓存路径
* @param context 上下文
* @param path 路径
* @return
* 有sd卡返回sd上的路径
* 没有sd卡返回cach中的路径
*/
public String getSDOrCache(Context context, String path){
String url = null;
if(isSdCardAvailable())
url = getSDDir(path);
else
url = getCacheDir(context, path);
return url;
}
/**
* 检测内存卡是否可用
* @return 可用则返回 true
*/
public boolean isSdCardAvailable(){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
return true;
}
return false;
}
/**
* 格式化url地址
* 以便根据url来命名文件
* @param name 图片url
* @return
*/
public String formatPath(String name){
String path = name;
path = path.replace(":", "_");
path = path.replace("/", "_");
return path;
}
/**
* 判断该路径的文件是否存在
* @param path 文件路径(完全路径)
* @return
*/
public boolean isExists(String path){
File file = new File(path);
if(file.exists())
return true;
return false;
}
/**
* 判断当前目录是否存在文件
* @param path
* @return
*/
public boolean hasMoreFile(String path){
File file = new File(path);
if(!file.exists())
return false;
String[] files = file.list();
if(files == null || files.length == 0)
return false;
return true;
}
/**
* 清除sd卡中过期的缓存
*
* @param basePath 路径(要清楚文件的路径)
*/
public void cleanInvalidCache(String basePath){
File file = new File(basePath);
if(!file.exists()) return;
File[] caches = file.listFiles();
if(caches == null || caches.length == 0) return;
long now = System.currentTimeMillis();
try {
for(int i=0;i
转载请声明:http://blog.csdn.net/u013519020/article/details/52233421