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

在实际的开发过程中,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" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值