android内部文件存储示例

内部文件存储示例

 

写了一个应用例子,主要是说明如何使用内部存储保存文件。

安装运行测试应用,主界面如下:



 

文件目录

 

在内部存储的话,文件应该存储在getFilesDir()返回的File对象指向的目录下,那么这个目录的路径是什么呢?点击按钮“文件目录”,运行结果如下:


 

从上图可知,内部存储的文件默认目录为/data/data/com.example.filesave/files,而com.example.filesave是我们应用的包名,所以目录形式实际上为/data/data/<应用包名>/files。

/data/data是内部文件系统的根目录下的路径,如果你的手机没有root的话,是没有权限查看此目录的。

 

缓存目录

 

我们知道缓存目录是通过getCacheDir()返回的File对象指向的目录,那么这个目录指向哪儿呢?点击按钮“缓存目录”,显示结果如下:


 

从上图得知,缓存目录为/data/data/com.example.filesave/cache,目录形式为/data/data/<包名>/cache。注意,如果当前手机的存储空间不够用的话,这个目录下的文件会被系统直接删除的,并且你收不到任何警告。

 

写文件

 

点击按钮“写文件”,我们将一个文件写到内部存储文件目录下,代码示例如下:

 

private void writeFile() {
			String filename = "myfile";
			String content = etWriteFile.getText().toString();
			FileOutputStream fos;
			Context context = getActivity();
			
			try {
				fos = context.openFileOutput(filename, context.MODE_PRIVATE);
				fos.write(content.getBytes());
				fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

文件输入的内容如下图所示:


 

点击按钮“读文件”,可以把相应内容读出来。代码及示例图如下:

 

private void readFile() {
			String filename = "myfile";
			String content = "";
			FileReader fr = null;
			Context context = getActivity();
			char[] buffer = new char[1024];
			
			try {
				StringBuilder strBuilder = new StringBuilder();
				fr = new FileReader(context.openFileInput(filename).getFD());
				while (fr.read(buffer) != -1) {
					strBuilder.append(buffer);
				}
				fr.close();
				content = strBuilder.toString();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			
			if (content.length() != 0) {
				tvReadFile.setText(content);
			} else {
				tvReadFile.setText("<内容空>");
			}
		}


 

 

写缓存与读缓存

 

读写缓存文件与上面的读写文件是类似的。不同的是,创建缓存文件时,应该使用File.createTempFile()方法,这样你的文件可以生成比较合理的名字。读写缓存文件的代码如下:

 

private String cacheFileName = "myCache";
		private void writeCache() {
			String filename = "myCache";
			File file = null;
			Context context = getActivity();
			String content = etWriteCache.getText().toString();
			FileOutputStream fos;
			
			try {
				file = File.createTempFile(filename, null, context.getCacheDir());
				cacheFileName = file.getName();
				fos = new FileOutputStream(file);
				fos.write(content.getBytes());
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		private void readCache() {			
			String content = "";
			FileReader fr = null;
			Context context = getActivity();
			char[] buffer = new char[1024];
			
			try {
				StringBuilder strBuilder = new StringBuilder();
				fr = new FileReader(new File(context.getCacheDir(), cacheFileName));
				while (fr.read(buffer) != -1) {
					strBuilder.append(buffer);
				}
				fr.close();
				content = strBuilder.toString();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			
			if (content.length() != 0) {
				tvReadCache.setText(content);
			} else {
				tvReadCache.setText("<内容空>");
			}
		}

 

运行效果如下:


 

 

上面就是简单地示例。有兴趣的同学参考示例代码。(下载示例代码

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值