android 文件存储

        文件存储数据使用了Java中的IO操作来进行文件的保存和读取,android的ContextWrapper封装了获取输入流和输出流的方法,这样一来,在每个Activity中都可以实现文件存储。在android中,可以把文件存储在设备的内部存储空间,也可以存储在扩展的内存上,对于某些为了界面的友好性或则日志文件,还可以存储在缓存里,但这些的文件可以被其他的程序访问。

    在android中,开发者可以直接使用设备的内部存储空间存储文件,默认情况下,这种方法保存的文件只能被本程序访问,当用户卸载该程序是,这些文件一并被删除。

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;

public class FileDemo extends Activity
{
	private String fileName = "test.txt";
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		save(fileName, "~~~内部存储方式~~~");
		String content = read(fileName);
		Log.e("content", content);
	}

	/**
	 * 内部存储
	 * @param fileName:文件名
	 * @param content:需要写入的数据
	 */
	public void save(String fileName,String content)
	{
		/**
		 * 使用内部存储时,文件是存储在/data/data/<package name>/files
		 * 可以用getFilesDir().getPath()查看存储路径
		 */
		try
		{
			/**
			 * openFileOutput()方法的第二参数用于指定操作模式,有四个可选参数:
			 * Context.MODE_PRIVATE=0:默认操作模式,代表该文件是私有数据,只能被应用本身访问
			 *                        在该模式下,写入的内容会覆盖原文件的内容
			 * Context.MODE_WORLD_READABLE=1:表示当前文件可以被其他应用读取
			 * Context.MODE_WORLD_WRITEABLE=2:表示当前文件可以被其他应用写入
			 * Context.MODE_APPEND=32768:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件                       
			 * 如果要设置文件为可读写,可以设置为:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE
			 */
			FileOutputStream fos = openFileOutput("test.txt", Context.MODE_PRIVATE);
			fos.write(content.getBytes("UTF-8"));
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * 读取文件数据
	 * @param fileName
	 * @return:读取数据内容
	 */
	public String read(String fileName)
	{
		String content = null;
		FileInputStream fis = null;
		ByteArrayOutputStream bos = null;
		try
		{
			fis = openFileInput(fileName);
			bos = new ByteArrayOutputStream();
			int length = 0;
			byte[] buffer = new byte[1024];
			while((length = fis.read(buffer))!= -1)
			{
				bos.write(buffer, 0, length);
			}
			content = bos.toString("UTF-8");
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally{
			try
			{
				bos.close();
				fis.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return content;
	}
	
}

        在File Explore视图下的/data/data/<package name>/files路径下,可以找到我们写入的文件test.txt,如下图:

    

        但有的时候,保存的文件很大,如一些音频视频文件,这个时候,如果把这些文件放在内部存储空间中,会很大程度上影响设备的运行速度,这个时候,就需要把这些文件存储在外部存储空间中。外部存储中的文件是可以被用户或者其他应用程序修改的,关于外部存储可以参考android中的文件操作详解以及内部存储和外部存储,这里就不作详述。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值