您的位置:首页 > 移动开发 > Android开发

Android数据存储之Internal Storage内部存储

2016-06-30 15:57 519 查看

前言:

所有 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息