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

android 存储方式(一) SD卡的存储

2014-12-11 23:01 253 查看
在实际的开发过程中,Android提供了五种方式存储数据:

1、文件的存储;2、使用sharedpreference进行存储数据;3、SQlite数据库进行存储;4、使用contentProvider进行存储;5、使用网络存储数据

JAVA提供了一套完整的IO流体系访问磁盘上的文件内容。Android支持这种访问方式来访问存储设备上的文件。

OpenFileOutput和OpenFIleInput的使用:Context提供了两个方法来打开应用程序等数据文件夹里的IO流。

FileInputStream OpenFileInput(String name),打开应用程序的数据文件夹name下对应的输入流;FileOutputStream OpenFileOutput(String name,int mode):打开应用程序的数据文件夹下的name文件对应的输出流。

其中mode的为打开的模式,该模式支持五种:

Context_PRIVATE = 0;//私有

Context_MODE_APPEND = 32768;//可追加方式

Context_MODE_WORLD_READABLE = 1;//可读

Context_MODE_WORLD_WRITEABLE = 2;//可写(这两个好像和名字是反过来的)

除此之外,Context还提供了如下方法来访问应用程序的数据文件夹:

getDir(String name,int mode)在应用程序的数据文件夹下获取或者创建name对应的子目录;

File getFileDir() 获取应用程序的数据文件夹的绝对路径;

String[] fileList()返回该应用程序的数据文件夹下的指定文件;

存储实例:

读写功能:

public class FileService {

private Context mContext;

public FileService() {

}

public FileService(Context context) {
this.mContext = context;
}

/**
* 对SD卡进行操作
*
* @param fileName
*            文件名
* @param content
*            内容
* @return 存储是否成功的状态
*/
public boolean saveContentFile(Context context, String fileName,
String content) {
boolean flag = false;

FileOutputStream mFileOutputStream = null;
File mFile = new File(Environment.getExternalStorageDirectory(),
fileName);
// Environment 表示Android中的环境中应用的操作,里面包含了许多常量
// 判断SD卡是否可用
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
try {
//这个没有指定存储模式,默认并不是追加方式进行存储的,而且FileOutputStream(写),FileInputStream(读)必须是对应的
//例如new FileOutputStream(mFile)和new FileInputStream(mFile)、context.openFileOutput(fileName,Context.MODE_APPEND)
//和context.openFileInput(fileName);
// mFileOutputStream = new FileOutputStream(mFile);
mFileOutputStream = context.openFileOutput(fileName,
Context.MODE_APPEND);
mFileOutputStream.write(content.getBytes());
flag = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (mFileOutputStream != null) {
try {
mFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return false;
}

/**
* 读取存储卡中文件的内容
*
* @param fileName
*            文件名
* @return 读取的内容
*/
public String getFileNameContent(Context context, String fileName) {
FileInputStream mFileInputStream = null;
// 缓存流,和磁盘无关,这个流不需要关闭
ByteArrayOutputStream mArrayOutputStream = new ByteArrayOutputStream();
File mFile = new File(Environment.getExternalStorageDirectory(),
fileName);
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
try {
// mFileInputStream = new FileInputStream(mFile);
mFileInputStream = context.openFileInput(fileName);
int len = 0;
byte[] data = new byte[1024];
while ((len = mFileInputStream.read(data)) != -1) {
mArrayOutputStream.write(data, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (mFileInputStream != null) {
try {
mFileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
return new String(mArrayOutputStream.toByteArray());
}

}


activity中读和写的方法如下:

public void SaveFileContent(){
FileService mFileService = new FileService(this);
boolean flag = mFileService.saveContentFile(this,"sdCard.txt",mEditText.getText()+"");
Toast.makeText(MainActivity.this, ""+flag, Toast.LENGTH_SHORT).show();
}

public void readFileContent(){
FileService mFileService = new FileService(this);
String content = mFileService.getFileNameContent(this,"sdCard.txt");
if(content != null){
mTextView.setText(""+content);
}
}


当然这是对存储卡进行的操作,还要在manifest文件中添加相应的权限:

<!-- 添加读写SD卡的权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐