天天看點

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。

繼續閱讀