Android读取文件

转载请注意申明地址,
http://blog.csdn.net/lib739449500/article/details/42836181
珍惜主人的劳动成果。

在实际开发中,Android提供了5种方式存储数据
1.文件存储数据
2.使用SharedPreferences存储数据
3. SQLite数据库存储数据
4. 使用ContentProvider存储数据
5. 网络存储数据

接下来就自己总结先写下文件存储数据这种方式。
就文件存储这种方式也分好几种情况。
1。读取应用程序的数据文件夹里的文件
可通过ContextopenFileOutputopenFileInput来打开文件的输入输出流  

FileInputStream  openFileInput (String name) :打开应用程序的数据文件夹下的 name 文件对应的输入流
FileOutStream openFileOutput(Stringname,int mode):打开应用程序的数据的文件夹下的name文件对应输出流
第一个参数为文件名,不能包含路径分割符“/”
其中第二个方法的第二个参数是对文件的访问权限,
Context.MODE_PRIVATE     =  0\\ 是应用程序私有的
Context.MODE_APPEND     = 32768 \\ 追加  如果要创建的文件存在则新写入的数据不会覆盖以前的数据
Context.MODE_WORLD_READABLE =  1 \\ 可读  所有应用程序都可以访问的
Context.MODE_WORLD_WRITEABLE =  2 \\ 可写   所有应用程序都可以写
如果希望有多个权限,则写成如下形式:
Context.MODE_PRIVATE + Context.MODE_APPEND (注意是用“+”号)
如果文件不存在,Android会自动创建它。
创建的文件保存在/data/data/包名/files目录,

除此之外, Context 还提供了如下几个方法来访问应用程序的数据文件夹:
getDir (String name,int mode) 在应用程序的数据文件夹下获取或者创建 name 对应的子目录
File getFilesDir () 获取该应用程序的数据文件夹的绝对路径
String[]fileList()返回该应用程序的数据文件夹下的指定文件
deleteFile (String) 删除该应用程序的数据文件夹下的指定文件

补充:如果您要读取其他应用的文件的话,你要完整写出这个文件的路径,如:
如/data/data/com.henii.android/files/myText.txt,
而且不能使用openFileInput方法(因为这个方法的参数是不能带分隔符“/”的)
所以您只能使用最一般的读取文件的方法进行读取
简单贴一下自己的测试代码:
/**
	 * 写入方法
	 * 
	 * @param fileName
	 *            文件的名称
	 * @param content
	 *            文件的内容
	 * @return
	 */
	public boolean save(String fileName, String content) {
		boolean flag = false;
		try {
			FileOutputStream outStream = context.openFileOutput(fileName,
					Context.MODE_PRIVATE + Context.MODE_APPEND);
			outStream.write(content.getBytes());
			flag = true;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 读取方法
	 * 
	 * @param fileName
	 * 文件的名称
	 * @return
	 */
	public String read(String fileName) {
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		try {
			FileInputStream inStream = context.openFileInput(fileName);
			int len = 0;
			byte[] data = new byte[1024];
			while ((len = inStream.read(data)) != -1) {
				outputStream.write(data, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new String(outputStream.toByteArray());
	}

转载请注意申明地址,
http://blog.csdn.net/lib739449500/article/details/42836181
珍惜主人的劳动成果。

2).读取sd卡上的文件

    很简单。只需两步即可。

    一是添加权限。

<!-- 允许用户创建和删除sdcard卡上的内容-->

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

<!-- 允许用户往sdcard卡上写入的内容-->

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

二是开始写代码即可。但读写之前得写通过EnvironmentgetExternalStorageDirectory方法来判断手机上是否插了SD卡,并且应用程序具有读写SD卡的权限。

简单贴一下读写代码:

public String testReadSdcard(String fileName) {
		FileInputStream inputStream = null;
		// 缓存的流,和磁盘无关,不需要关闭
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		File file = new File(Environment.getExternalStorageDirectory(),
				fileName);
		if (Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState())) {
			try {
				inputStream = new FileInputStream(file);
				int len = 0;
				byte[] data = new byte[1024];
				while ((len = inputStream.read(data)) != -1) {
					outputStream.write(data, 0, len);
				}

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (inputStream != null) {
					try {
						inputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}

		}

		return new String(outputStream.toByteArray());
	}

	/**
	 * @param fileName
	 *            文件的名称
	 * @param content
	 *            文件的内容
	 * @return
	 */
	public boolean tesWriteSdcard(String fileName, String content) {
		boolean flag = false;
		FileOutputStream fileOutputStream = null;
		// 获得sdcard卡所在的路径
		File file = new File(Environment.getExternalStorageDirectory(),
				fileName);
		// 判断sdcard卡是否可用
		if (Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState())) {
			try {
				fileOutputStream = new FileOutputStream(file, true);
				fileOutputStream.write(content.getBytes());
				flag = true;
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (fileOutputStream != null) {
					try {
						fileOutputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return flag;
	}


3).读取raw文件夹中获取文件

InputStream in = getResources (). openRawResource ( R.raw.a );
EncodingUtils.getString(buffer, “UTF-8”);//解决中文乱码的问题
注意:资源文件只能读不能写
4).读取asset文件夹中获取文件
InputStream in = getResources (). getAssets ().open( fileName );
EncodingUtils.getString (buffer, “UTF-8”);// 解决中文乱码的问题
Android 获取 assets 的绝对路径
第一种方法:
String path = "file:///android_asset/ 文件名 ";
第二种方法:
InputStream  path = getClass (). getResourceAsStream ("/assets/ 文件名 ");
注意:资源文件只能读不能写

转载请注意申明地址,
http://blog.csdn.net/lib739449500/article/details/42836181
珍惜主人的劳动成果。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值