天天看点

Android读取assets目录下文件数据内容

Android读取assets目录下文件数据内容

Android的体系架构设计中,assets目录下的数据内容(图片、文件等等)将不会被Android系统压缩、二次处理等,assets目录下的文件将保持原汁原味打包进Android的apk文件中,因此,利用Android assets这一点特性,根据项目开发的需要,在某种情况下,可以在assets目录下存放一些不希望被Android系统二次处理的原始文件,就像在PC开发时候直接针对硬盘上存放的文件内容进行读写一样读出原始数据。比如Android项目中有以下assets文件目录结构,如图:

现给出代码实例:

public String readAsset() {
		AssetManager am = this.getAssets();
		String[] path = null;
		try {
			// 列出files目录下的文件
			path = am.list("files");
		} catch (IOException e) {
			e.printStackTrace();
		}

		String data = "";

		// 遍历assets目录下,files文件夹下的所有文件,读取这些文件的数据并输出。
		for (int i = 0; i < path.length; i++) {
			InputStream is = null;
			try {
				// 根据上文的 ‘files’+文件名,拼成一个路径,用AssetManager打开一个输入流,读写数据。
				is = am.open("files/" + path[i]);
			} catch (IOException e) {
				e.printStackTrace();
			}

			// 读取一个文件完成,加上换行符(主要是为了观察输出结果,无他)。
			data = data + readDataFromInputStream(is) + "\n";

			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return data;
	}

	public String readDataFromInputStream(InputStream is) {
		BufferedInputStream bis = new BufferedInputStream(is);

		String str = "", s = "";

		int c = 0;
		byte[] buf = new byte[64];
		while (true) {
			try {
				c = bis.read(buf);
			} catch (IOException e) {
				e.printStackTrace();
			}

			if (c == -1)
				break;
			else {
				try {
					s = new String(buf, 0, c, "UTF-8");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				str += s;
			}
		}

		try {
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return str;
	}           

其中,this指针为当前的Context或者Activity。

继续阅读