Android读写文件

原创 2011年09月24日 21:03:15
用文件进行数据存储
 
1.存储到android自带的存储空间中
 
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
public class FileService {
	private Context context;
	 public FileService(Context context) {
		this.context = context;
	}
	/**
	 * 保存文件
	 * @param filename 文件名称
	 * @param content  文件内容
	 * @throws IOException 
	 */
	public void save(String filename, String content) throws Exception {
		//利用javaIO实现文件的保存
		FileOutputStream outStream =context.openFileOutput(filename, Context.MODE_PRIVATE);
		outStream.write(content.getBytes());//向文件中写入数据,将字符串转换为字节
		outStream.close();
	}
}

通过Context.openFileOutput(String name,int mode)可以获取一个文件输入流

name为文件名,mode为文件模式,有4种模式

输出流指向路径为:/data/data/包名/files/

文件模式在Context中有定义常量

MODE_PRIVATE                              私有的且覆盖

MODE_APPEND                              私有的且追加

MODE_WORLD_READABLE           其他程序可读但不可写

MODE_WORLD_WRITEABLE          其他程序可写但不可读

组合模式使用(其他程序可写也可读),例如:MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE


2.写入文件到SD卡

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。

(1).首先要在清单文件中(AndroidManifest.xml)中加入访问SDCard的权限如下:

<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

(2).判断用户是否插入SDCard卡
	        	//判断SDCard是否存在
	        	if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
					service.saveToSDCard(filename,content);   //实现保存
					Toast.makeText(getApplicationContext(), R.string.sdsuccess, 1).show();
	        	}else{
	        		Toast.makeText(getApplicationContext(), R.string.sdderror, 1).show();
	        	}
(3).业务层保存操作
	 public void saveToSDCard(String filename,String content)throws Exception{
		 //Environment.getExternalStorageDirectory()表示找到sdcarf目录
		 File file =new File(Environment.getExternalStorageDirectory(),filename);
		 FileOutputStream outStream =new FileOutputStream(file);
		 outStream.write(content.getBytes());
		 outStream.close();
	 }

注:2.1版本以下的SDCard位置和2.2之后版本不同

可以通过Environment.getExternalStorageDirectory()获取当前SDCard位置,兼容所有版本

获取SDCard状态

通过Environment.getExternalStorageState()方法获取SDCard当前装填

常量 Environment.MEDIA_MOUNTED 为已安装

读取文件内容

如果要打开存放在/data/data/<packagename>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。

如:

	/**
	 * 读取文件内容
	 * @param filename  文件名称
	 * @return  文件内容
	 * @throws Exception
	 */
	public String read(String filename) throws Exception{
		//得到输入流之后
		FileInputStream inStream =context.openFileInput(filename);
		//创建一个往内存输出流对象
		ByteArrayOutputStream outStream =new ByteArrayOutputStream();
		byte[] buffer =new byte[1024];
		int len =0;
		while((len=inStream.read(buffer))!=-1){
			//把每次读到的数据写到内存中
			outStream.write(buffer,0,len);
		}
		//得到存放在内存中的所有的数据 
		byte [] data =outStream.toByteArray();
		return new String(data);
	}

测试:

package cn.itcast.test;

import android.test.AndroidTestCase;
import android.util.Log;
import cn.itcast.service.FileService;

public class FileServicTest extends AndroidTestCase {
    private static final String TAG="FileServicTest";
	public void testRead() throws Throwable{
		FileService service =new FileService(this.getContext());
		String result=service.read("itcast.txt");
		Log.i(TAG,result);  //打印
	}
}

SharedPreferences(参数)存储

很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件或者xml进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:

 在程序中保存一些配置参数的时候我们经常使用SharedPreferences

Context.getSharedPreferences(String name,int mode)

该方法可以在/data/data/<package>/shared_pref/目录下创建一个以name命名的xml文件,mode文件为模式

存储偏好

调用edit()方法可以获取一个Editor对象,对数据进行存储,存储之后需要调用commit()保存到文件

读取偏好

获得SharedPreferences之后调用getString()、getInt()等方法获取其中设置的值

在Activity中获取SharedPreferences

在Activity中可以调用getPreferences(int mode)方法获得一个SharedPreferences,文件名和Activity名一致

 

	/**
	 * 使用SharedPreferences进行数据存储
	 * @param name name属性
	 * @param age age属性
	 */
	public void save(String name, String age) {
		// 获取SharedPreferences对象, 路径在 /data/data/cn.itcast.preferences/shared_pref/preferences.xml, 文件模式为MODE_PRIVATE
		SharedPreferences preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
		// 获取编辑器
		Editor editor = preferences.edit();
		// 通过editor进行设置
		editor.putString("name", name);
		editor.putString("age", age);
		// 提交修改, 将数据写出到文件
		editor.commit();
	}

	/**
	 * 访问SharedPreferences中的数据
	 * @return 偏好设置名值组成的Map
	 */
	public Map<String, String> load() {
		SharedPreferences preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
		String name = preferences.getString("name", "");
		String age = preferences.getString("age", "");
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", name);
		map.put("age", age);
		return map;
	}


 

Android的读写文件权限

/** * 写文件 * @param str */ public void write(String str){ File file = new File(Environment.g...
  • aicpzl
  • aicpzl
  • 2016年05月19日 11:05
  • 5686

Android 文件的读取和写入

(1)openFileInput和openFileOutput的使用文件的使用,注意最后要用finally给关闭掉。openFileOutput:(写入文件,如果没有文件名可以创建,这里不需要判断是否...
  • Zadarrien_China
  • Zadarrien_China
  • 2017年02月15日 23:54
  • 7256

安卓app的文件读写方法

最近在学习安卓,总结记录下app读写文件的位置和方法; 安卓的app可以读写的位置为: 1、内置data目录下对应app名称的目录; 2、扩展SD卡(包括虚拟的内置SD卡和外置SD卡);...
  • lzpdz
  • lzpdz
  • 2016年02月29日 17:18
  • 2171

android的读写文件

  • 2014年05月22日 16:19
  • 69KB
  • 下载

Android 读写文件实例

  • 2012年11月22日 17:17
  • 198KB
  • 下载

Android开发入门之读写文件

5.1读写文件 5.1.1 需求分析效果图 5.1.2.设计思路与步骤 1.首先布局,就不多说了。线性搞定,两个EditText,两个Button,注意两个Button是在一个水平显...
  • tingerh
  • tingerh
  • 2012年12月22日 11:23
  • 274

Android 读写文件操作

Android读写文件的类型可以分为三类:资源文件的读取、数据区文件的读取、SD卡文件的读取。 1、资源文件 1.1 从res/raw中读取文件数据(只能读,不能写) InputStream ...
  • xuchaobei123
  • xuchaobei123
  • 2015年11月03日 16:46
  • 242

关于Android6.0读写文件权限问题

旧权限无效今天在写一个异步下载文件进度条的Demo,但是最终运行却提示我没有读写文件的权限,明明已经在配置清单AndroidManifest添加了读写权限了,最后通过百度才知道了Android6.0为...
  • qq_36407875
  • qq_36407875
  • 2017年11月11日 15:44
  • 113

Android开发之如何读写文件

这一节将给大家介绍在Android中如何用文件进行数据的存取. 首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里A...
  • seucbh
  • seucbh
  • 2013年12月06日 13:18
  • 733

android 随手记 读写文件的几种方式

java中多种方式读文件 一、多种方式读文件内容。 1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 */ import java...
  • liyaming1
  • liyaming1
  • 2013年10月31日 09:09
  • 1203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android读写文件
举报原因:
原因补充:

(最多只允许输入30个字)