Android中的文件读写全面总结

转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41625187

深入分析Java中的I/O类的特征及适用场合 一文中,我详细介绍了Java中的I/O,但是,如果以为Android中的I/O与Java中一样,那就大错特错了。实际上,它们有一定的相同之外,但更多的是区别,因为Android系统中的文件存放位置不同,读取方式也不一样。下面将详细介绍Android中的文件读写:

一、资源文件的读取,不需要在Manifest文件中添加权限

1.从resource中的asset中读取文件,要注意的是asset中的文件只能读而不能写

public static void readFromAsset(Context context,String fileName)
	{
		try
		{
		    InputStream in=context.getResources().getAssets().open(fileName);
		    int length=in.available();
		    byte[]buffer=new byte[length];

		    in.read(buffer);
		    in.close();
		    String content=new String(buffer,"UTF-8");
		    ToastUtils.showShortToast(context, content);    

		}
	    catch(IOException e)
	    {
	    	e.printStackTrace();
	    }

	}
	

2.从resource的raw中读取文件,与上面的一样,也是只能读取而不能写入

public static void readFromRaw(Context context,int rawResId)
	{
	      InputStream in=context.getResources().openRawResource(rawResId);
	      try
	      {
	    	  int length=in.available();
		      byte[]buffer=new byte[length];
		      in.read(buffer);

		      String res=EncodingUtils.getString(buffer, "UTF-8");

	      }
	     catch(IOException ex)
	     {
	    	 ex.printStackTrace();
	     }
	     finally
	     {
	    	 if(in!=null)
	    	 {
	    		 try
	    		 {
	    			 in.close();
	    		 }
	    		 catch(Exception e)
	    		 {
	    			 e.printStackTrace();
	    		 }
	    	 }
	     }
	}

看到上面两段示例代码可能有人会问,会什么不想Java中那样使用try(InputStream in=context.getResources().getAssets().open(fileName))这种autoclose的方式,但是实际上它需要Java SE1.7的版本才支持,而目前的Android版本并不支持,因而无法使用这种方法。

二、读写应用包名目录(即/data/data/packagename)下的文件

首先是读文件

public static void readFromPackage(Context context,String fileName)
	{
		try
		{
			FileInputStream fis=context.openFileInput(fileName);
			int length=fis.available();
			byte[]buffer=new byte[length];
			fis.read(buffer);

			String content=new String(buffer,"UTF-8");
			ToastUtils.showLongToast(context, content);
		}
		catch(IOException ex)
		{
			ex.printStackTrace();
		}
	}
	

然后是写文件,注意权限最好是Context.MODE_PRIVATE,否则有时候会触犯安全红线。目前的模式主要有以下几种:

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND;

Context.MODE_APPEND:该模式会检查文件是否存在,若存在就往文件追加内容,否则就创建新文件;

Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

Context.WORLD_WRITEABLE:表示当前文件可以被其他应用写入;

public static void writeToPackage(Context context,String fileName,String str)
	{
		try
		{
			FileOutputStream fos=context.openFileOutput(fileName,Context.MODE_PRIVATE);
			byte[]buffer=str.getBytes();

			fos.write(buffer);
			fos.close();

		}
		catch(IOException ex)
		{
			ex.printStackTrace();
		}
	}

三、读写sd卡中的文件,注意要添加以下权限:

<!--写入数据到SD卡-->

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

<!--创建或删除SD卡中的文件-->

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

首先是从SD卡读取文件

     public void readFromSdcard(Context context,String fileName)
     {
    	 try
    	 {
    		 FileInputStream fis=new FileInputStream(fileName);
    		 int length=fis.available();
    		 byte[]buffer=new byte[length];
    		 fis.read(buffer);

    		 String content=new String(buffer,"UTF-8");
    		 ToastUtils.showLongToast(context, content);
    	 }
    	 catch(IOException ex)
    	 {
    		 ex.printStackTrace();
    	 }
     }

然后是写入文件到SD卡:

  public static void writeToSdCardFile(byte[]buffer,Context context,String fileName)
     {
    	 try
    	 {
    		 FileOutputStream fos=new FileOutputStream(fileName);
    		 fos.write(buffer);
    		 fos.close();
    	 }
    	 catch(IOException ex)
    	 {
    		 ex.printStackTrace();
    	 }

     }

当然,上面只是进行了最基础的示例,至于获取到文件流之后的包装问题(如采用缓冲流等),就深入分析Java中的I/O类的特征及适用场合 一文中介绍得完全一样了,也建议在实际使用时不要采用最基本的文件操作流,由于在之前的文章中详细讲过,这里就不展开讨论了。

时间: 2024-10-18 12:54:25

Android中的文件读写全面总结的相关文章

Android中的文件读写总结

在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以用JAVA的文件处理方法来处理,但是内部文件必须用openfileinput或者openfileoutput来进行打开和关闭 在对SD卡上的文件进行操作之前需要先检查SD卡的状态(是否可读写,可访问等)

Android中的文件权限操作

默认本工程创建的文件本工程对其有读写权限. 我们可以通过context.openFileOutput("文件名", 模式): 我们可以创建私有, 共有, 只读, 只写文件, 默认的文私有文件. 如果别的Android工程访问本工程的文件的话就会受限制, android的内核是linux, 所以他的文件管理和linux中的文件时一样的. 创建文件代码: /** * 创建各种文件 * @throws IOException * */ @SuppressLint({ "WorldW

[笨木头Unity3D]杂记003&#183;Unity在Android中读取文件

这周被一个问题给折腾了几个晚上,那就是在Android中读取文件,这本是一件很简单的事情,可想象总是美好的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2094 文章来源:笨木头与游戏开发 1.在电脑上读取文件 首先要解决的当然是在电脑上读取文件了,这个并不难,网上一堆资料. 比如: public static string LoadFile(string filePath) { string url = Ap

Android游戏之文件读写类和绘图类设计

Android游戏之文件读写类和绘图类设计 1.基础知识: A. FileInputStream http://developer.android.com/reference/java/io/FileInputStream.htmlB. FileOutputStreamhttp://developer.android.com/reference/java/io/FileOutputStream.htmlC. Environment.getExternalStorageDirectory()htt

【Android开发】 文件读写操作——总结

在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: 1 String res = ""; 2 try{ 3 4 //得到资源中的Raw数据流 5 InputStream in = getResources().openRawResource(R.raw.tes

cceditbox和cocostudio联合界面点击事件无响应问题,Android中创建文件夹问题

这两个问题折腾了我一天多时间,尽快下班时候把创建文件夹问题给解决了,刚把cceditbox点击事件无响应问题解决了.真是大爽. 1.创建文件夹 _mkdir()这个c函数就行,在vs ide中,定位的头文件是direct.h,但是这个文件不被ndk编译通过,没有这个文件.好吧,死脑筋,开始怀疑eclipse库路径设置有问题,但是不知道哪不对,搜索到了头大地步,好吧,认真仔细一看,原来是在ndk中,_mkdir函数放在了#include <sys/stat.h>中,改为这个头文件就行了. 2.点

Android中的文件存储

另见Android中的文件存储 一.前言 文件存储时Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因此它比较适合用于存储一些简单的文本数据或二进制数据. 二.将数据存储到文件中 Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中. 可以看到,此方法接收两个参数,第一个即是文件的名字,这里不可以包含文件路径,所有的文件都是默认存储到/data/data//files/目录下的.

【转】 android中的文件操作详解以及内部存储和外部存储

摘要 其实安卓文件的操作和Java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 相对 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念

Android数据存储——文件读写操作(File)

Android文件读写操作 一.文件的基本操作 Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件.在默认状态下,文件是不能在不同程序间共享的. 当用户卸载您的应用程序时,这些文件删除. 文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的 数据,通过deleteFile方法删除一个指定的文件. 1,常用方法介绍: File是通过FileInputStream和FileOutput