打开Android studio中的Device file Explorer
1.内部存储
在Device file Explorer视图中有个data目录
这个data根目录下面还有个data目录,然后就能找到自己应用的包名文件夹,其所对应的存储空间就是Android的内部存储,展开data/data/package_name/ ,该路径下可以保存cache、SharedPreference、数据库文件、以及一些自己创建的file文件等。这些内部存储里面的数据就会随着应用的卸载而被删除
2.外部存储
同样是在Device file Explorer视图中,可以看到/mnt/sdcard或者/sdcard目录。/sdcard其实就是sd挂载到设备上的一个软连接,相当于/mnt/sdcard的一个快捷方式。这个存储空间就是Android的外部存储
展开sdcard这个文件夹
里面有10个文件夹,其中除了Android这个文件夹为私有文件夹。其他几个都是公用空间,主要是用来存放音乐、视频、图片、下载文件等等信息。当你把Android手机连接到电脑上,然后电脑能识别出来的内容就是外部存储。不太恰当地说,Android的内部存储和外部存储划分的界限应该是一个app所对应的包名里面和外面的存储空间。在自己包名(com.example.xxx.xxx)里面的内容就只有自己能访问也就是内部存储,和在公共区域(比如相册,音乐,下载等文件夹)里面大家如果取得了权限都可以去访问也就是外部存储。
3.Android中的文件输入输出流
几个方法的比较:
openFileOutput()
getFilesDir()
getDataDirectory()
getExternalFilesDir()
/**
*这个方法打开的就是data/data/package_name/files/目录下的文件
*刚开始看到这个方法的时候还在好奇“我就传了个文件名,它是怎么找到这个文件的(/滑稽.png)”
*再这个目录下面如果没有fileName这儿名儿的文件 那么系统就会创建一个
*/
openFileOutput(String fileName, int mode);
/**
*这个方法返回的路径就是 /data/data/com.example.savefiledemo/files
*返回的是内部存储下的文件夹,不是文件
*/
getFilesDir();
//返回内部存储的根目录 /data
getDataDirectory();
/**
*传入的参数有Environment_DCIM、Environment_MUSIC、Environment_DOWNLOADS等等
*返回路径(Environment_MUSIC) sdcard/Android/data/com.example.savefiledemo/files/Music
*/
getExternalFilesDir(String type);
3.1向文件中写入内容
/**
* 在data/data/package_name/file/ 目录下创建文件并写入内容
* @param context 传入上下文
* @param fileName 要创建或者已经存在的文件名 eg: demo.txt
* @param content 要写入文件的内容
*/
public static void writeToFile(Context context, String fileName, String content) {
try {
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.2从文件中读取内容
/**
* 读取文件的内容
* @param context 传入的上下文
* @param fileName 要读取的文件名
* @return 读取出来的内容
*/
public static String readToFile(Context context,String fileName){
StringBuilder builder = new StringBuilder();
try {
byte[] bytes = new byte[1024];
FileInputStream fis = context.openFileInput(fileName);
int len = 0;
while ((len = fis.read(bytes)) != -1){
builder.append(new String(bytes,0,len));
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
return builder.toString();
}