SharePreferences
用于存储简单的数值;
主要操作流程
**SharedPreferences()的四种操作模式: **
- Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
- Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
- MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
- MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
管理文件
存储方式:
- 存储在内部:Internal storage(例如上面说到的SharePreferences)
-
存储在外部:External storage
** 若要使用External storage,需要先在manifest上注册
WRITE_EXTERNAL_STORAGE**
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
另外,运行的apk会默认安装在手机内存里,若要装到sd卡的话需要在manifest加上installLocation的值,如下图:
如何存储在外部
//创建File
//File(“指定目录路径”, “文件名”)
//getFilesDir():Activity的一个方法,即当前Activity的路径
File file = new File(getFilesDir(), "test01");
file.createNewFile();
Log.i("aaa", "getFilesDir() 路径:" + getFilesDir().getAbsolutePath());
Log.i("aaa", "file 路径:" + file.getAbsolutePath());
try {
Boolean isSuccess = file.createNewFile();
} catch (IOException e) {
Log.i("create File error:", e.toString());
e.printStackTrace();
}
//写数据
try {
FileOutputStream fileOutputStream = openFileOutput("test02", MODE_PRIVATE);
String str = "hello lin";
try {
fileOutputStream.write(str.getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace(); }
} catch (FileNotFoundException e) {
e.printStackTrace();
}
区别
SharePreferences只能存储一些小的数据;
而外部存储可以存储比较大的数据,扩展性更好、更灵活;
读取文件
读取asset文件:
//获取asset里某文件的内容
InputStream inputStream = getResources().getAssets().open(“文件名”);
//获取asset里某文件夹里所有文件名
String[] strings = getAssets().list(“文件夹名”);
//获取asset里的图片文件
InputStream inputStream = getAssets().open(“图片名”);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bitmap);
//读音乐文件
AssetFileDescriptor assetFileDescriptor = getAssets().openFd(“song.mp3”);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
mediaPlayer.setDataSource(
assetFileDescriptor.getFileDescriptor(),
assetFileDescriptor.getStartOffset(),
assetFileDescriptor.getLength());
mediaPlayer.prepare();mediaPlayer.start();读取raw文件:
InputStream inputStream = getResources().openRawResource(R.raw.weilan);-
读取sdcard:
String s = Environment.getExternalStorageDirectory().getPath() + "text/a.txt";
File file1 = new File(s);//其他 //获取Android中data数据的目录路径 String s2 = Environment.getDataDirectory().getPath(); //获取缓存数据的目录路径 String s3 = Environment.getDownloadCacheDirectory().getPath();
注意:官方推荐Environment.getExternalStorageDirectory().getPath()来获取sdcard的路径,不要直接写“/sdcar/text/a.txt”。