概述
前言:
所有 Android 设备都有两个文件存储区域:“内部”和“外部”存储。这些名称在 Android 早期产生,当时大多数设备都提供内置的非易失性内存(内部存储),以及移动存储介质,比如micro SD 卡(外部存储)。一些设备将永久性存储空间划分为“内部”和“外部”分区,即便没有移动存储介质,也始终有两个存储空间,并且无论外部存储设备是否可移动,API 的行为均一致。
内部存储的特点:
- 不必申请权限,始终可用
- 用户不能访问
- 一般情况下,别的应用不能访问。只有明确将文件设置为可读或可写,并且别的应用知道您的应用的软件包名称和文件名,才能通过编程访问。
- 当应用被卸载时,系统会从内部存储中移除您的应用的所有文件。
- 当您希望用户或其他应用均无法访问您的文件时,内部存储是最佳选择。
使用说明:
import android.content.Context;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InternalStorage {
/**
* 得到内部存储的根目录:/data/data/包名/files
*/
public static File getRootDir(Context context) {
return context.getFilesDir().getAbsoluteFile();
}
/**
* 向内部存储根目录下某个文件写入一个字符串
*/
public static void writeString2File(Context context, String fileName, String content) {
FileOutputStream outputStream = null;
try {
// fileName只能是文件名,不能包含目录分隔符,该文件若不存在会自动创建
outputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE);
outputStream.write(content.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 读取内部存储根目录下某个文件的内容
*/
public static String readStringFromFile(Context context, String fileName) {
BufferedReader reader = null;
StringBuffer buffer = new StringBuffer();
String line = null;
try {
// fileName只能是文件名,不能包含目录分隔符,该文件若不存在FileNotFoundException
reader = new BufferedReader(new InputStreamReader(context.openFileInput(fileName)));
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return buffer.toString();
}
/**
* 得到内部缓存的根目录:/data/data/包名/cache
*/
public static File getCacheRootDir(Context context) {
return context.getCacheDir().getAbsoluteFile();
}
/**
* 向内部缓存根目录下某个临时文件里写入一个字符串
*/
public static void writeString2CacheFile(Context context, String fileName, String content) {
FileOutputStream outputStream = null;
File file = null;
try {
file = File.createTempFile(fileName, null, context.getCacheDir());
outputStream = new FileOutputStream(file);
outputStream.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 得到"/data/data/包名/"下名为app_dir的目录(app_前缀为系统自动添加),若不存在会自动创建
*/
public static File getDir(Context context, String dir) {
return context.getDir(dir, Context.MODE_PRIVATE);
}
/**
* 删除"/data/data/包名/files/"下名为fileName的文件,删除成功返回true,否则返回false
* fileName只能是文件名,不能包含目录分隔符
*/
public static boolean deleteFile(Context context, String fileName) {
return context.deleteFile(fileName);
}
}
最后
以上就是欣慰白羊为你收集整理的Android数据存储之Internal Storage内部存储的全部内容,希望文章能够帮你解决Android数据存储之Internal Storage内部存储所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复