ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> 移动开发 >> Android - 文件读写操作 总结

Android - 文件读写操作 总结(3/4)

来源:网络整理     时间:2016-03-24     关键词:

本篇文章主要介绍了"Android - 文件读写操作 总结",主要涉及到方面的内容,对于移动开发感兴趣的同学可以参考一下: 在android中的文件放在不同位置,它们的读取方式也有一些不同。本文对android中对资源文件的读取、数据区文件的读取、SD卡文件的读取及RandomAcc...

//其中read_raw是一个txt文件,存放在raw目录下。
//read_raw.txt文件的内容是:"ABCDEFGHIJKLMNOPQRST"
public String getRawString() throws IOException {

	String str = null;

	InputStream in = getResources().openRawResource(R.raw.read_raw);

	int length = in.available();
	byte[] buffer = new byte[length];

	in.skip(2); //跳过两个字节
	in.read(buffer,0,3); //读三个字节

	in.skip(3); //跳过三个字节
	in.read(buffer,0,3); //读三个字节

	//最后str="IJK"
	str = EncodingUtils.getString(buffer, "BIG5");

	in.close();

	return str;
}


从上面的实例可以看出skip函数有点类似于C语言中的seek操作,但它们之间有些不同。

需要注意的是:

1、skip函数始终是从当前位置开始跳的。在实际应用当中还要再判断一下该函数的返回值。

2、read函数也始终是当前位置开始读的。

3、另外,还可以使用reset函数将文件的当前位置重置为0,也就是文件的开始位置。

如何得到文件的当前位置?

我没有找到相关的函数和方法,不知道怎么样才能得到文件的当前位置,貌似它也并不是太重要。

八、如何从FileInputStream中得到InputStream?

public String readFileData(String fileName) throws IOException{ 
  String res=""; 
  try{ 
         FileInputStream fin = new FileInputStream(fileName); 
	 InputStream in = new BufferedInputStream(fin);

         ...

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

}

九、APK资源文件的大小不能超过1M,如果超过了怎么办?我们可以将这个数据再复制到data目录下,然后再使用。复制数据的代码如下:

public boolean assetsCopyData(String strAssetsFilePath, String strDesFilePath){
	       boolean bIsSuc = true;
	       InputStream inputStream = null;
	       OutputStream outputStream = null;

	       File file = new File(strDesFilePath);
	       if (!file.exists()){
	           try {
	              file.createNewFile();
	              Runtime.getRuntime().exec("chmod 766 " + file);
	           } catch (IOException e) {
	              bIsSuc = false;
	           }

	       }else{//存在
	           return true;
	       }

	       try {
	           inputStream = getAssets().open(strAssetsFilePath);
	           outputStream = new FileOutputStream(file);

	           int nLen = 0 ;

	           byte[] buff = new byte[1024*1];
	           while((nLen = inputStream.read(buff)) > 0){
	              outputStream.write(buff, 0, nLen);
	           }

	           //完成
	       } catch (IOException e) {
	           bIsSuc = false;
	       }finally{
	           try {
	              if (outputStream != null){
	                  outputStream.close();
	              }

	              if (inputStream != null){
	                  inputStream.close();
	              }
	           } catch (IOException e) {
	              bIsSuc = false;
	           }

	       }

	       return bIsSuc;
	    }


转载时请注明出处:http://blog.csdn.net/ztp800201/article/details/7322110


总结:

1、apk中有两种资源文件,使用两种不同的方式进行打开使用。
raw使用InputStream in = getResources().openRawResource(R.raw.test);
asset使用InputStream in = getResources().getAssets().open(fileName);

这些数据只能读取,不能写入。更重要的是该目录下的文件大小不能超过1M。

同时,需要注意的是,在使用InputStream的时候需要在函数名称后加上throws IOException。

相关图片

相关文章