Android数据存储之——内部存储

    内部存储,在Android中,开发者可以直接使用设备的内部存储器中保存文件,默认情况下,以这种方式保存的和数据是只能被当前程序访问,在其他程序中是无法访问到的,而当用户卸载该程序的时候,这些文件也会随之被删除。

       有两种方法可以以文件的形式用来获取内部存储空间目录:

      1、File getFilesDir():获取代表内部存储文件系统的文件。

      2、File getCacheDir ():获取代表内部临时存储目录的文件。

      为了在以上的目录中创建文件,使用如下的方法:

   File file = new File(context.getFilesDir(), filename);
      然后就使用FileInputStream和FileOutputStream就可以对这些文件进行操作了,如下代码所示。

   FileOutputStream fos1=new FileOutputStream(new File(getFilesDir(), "test"));

除了上面介绍的方法,用的比较多的是下面介绍的方法:


数据写入方式

        基本上也是先获得一个文件的输出流,然后以write()的方式把待写入的信息写入到这个输出流中,最后关闭流即可,这些都是JavaIO流的操作。具体步骤如下:

   1、使用Context.openFileOutput()方法获取到一个FileOutputStream对象。

   2、把待写入的内容通过write()方法写入到FileOutputStream对象中。

   3、最后使用close()关闭流。 

   上面介绍的Context.openFileOutput()方法有两个重载函数,它们分别是:

    FileOutputStream openFileOutput(Stringname):以MODE_PRIVATE的模式打开name文件。

    FileOutputStream openFileOutput(Stringname,int mode):以mode的模式打开name文件。

    上面第二个重载函数中,mode为一个int类型的数据,这个一般使用Context对象中设置好的常量参数,有如下几个:

    MODE_APPEND:以追加的方式打开一个文件,使用此模式写入的内容均追加在原本内容的后面。

    MODE_PRIVATE:私有模式(默认),如果文件已经存在会重新创建并替换原文件,如果不存在直接创建。

    MODE_WORLD_READABLE:以只读的方式打开文件。

    MODE_WORLD_WRITEABLE:以只写的方式打开文件。

    代码如下:

FileOutputStream fos = openFileOutput(file_name,Context.MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.write(et.getText().toString());
osw.flush();
fos.flush();
osw.close();// 后打开的先关闭,有顺序的
fos.close();

数据读取方式

       使用Context.openFileInput()方法获取到一个FileInputStream对象,从FileInputStream中读取数据,也有两个重载函数,和Context.openFileOutput()类似。

FileInputStream fis = openFileInput(file_name);					
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
char input[] = new char[fis.available()];
isr.read(input);
isr.close();
fis.close();
text.setText(new String(input));

保存缓存文件

       当你只是想缓存一些文件,而不是永久保存这些文件,应该使用getCacheDir()方法来打开一个代表APP用来存储临时缓存文件的内部存储空间目录的文件,使用createTempFile方法在目录下创建文件,代码如下所示:

	public File getTempFile(Context context, String url) {
		File file = null;
		try {
			String fileName = Uri.parse(url).getLastPathSegment();
			// 在APP的缓存目录下面,创建一个临时文件
			file = File.createTempFile(fileName, null, context.getCacheDir());
			//file=new File(context.getCacheDir(), fileName); 和以上方法一样
			FileOutputStream fos=new FileOutputStream(file);
			FileInputStream fis=new FileInputStream(file);
		} catch (IOException e) {
			// Error while creating file
		}
		return file;
	}

       注意:当设备的内部存储空间不足的时候,Android可能会删除这些缓存文件来释放空间。所以你应该自己主动管理这些缓存文件而不是让系统来管理,当卸载APP的时候,这些缓存文件也会被移除。

其他有用的方法

  还有几个方法需要特别注意一下,这几个方法对于文件关系提供了更好的支持,配合上面介绍的方式,就可以对文件的数据进行常规的CRUD操作(增删改查),方法如下:

      File getDir (String name, int mode):在内部存储空间创建或者打开一个存在的目录。

      boolean deleteFile(String name):删除一个指定文件名为name的文件。

      String[] fileList():当前应用内部存储路径下的所有文件名。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值