關於Android Assets讀取文件為File對象的問題,在Assets里面放置文件,在使用的時候,一般是使用AssetManger對象,open方法獲取InputStream
然后進行其他操作.
這里遇到了這樣需求,直接把Assets里面文件讀取為一個File對象,找了半天,沒有找到這樣方法,搜索了很久,發現這樣是行不通的.
是不能直接從asset獲取然后直接轉換為File對象的,因為asset被存儲為apk中,除非你解壓Apk文件,一般是不能找到一個Path實例化一個File對象的,
這里也有特殊情況,webview可以根據asset的路徑加載在asset存放的.html文件:
WebView wv = new WebView(context); wv.loadUrl("file:///android_asset/help/index.html");
如果需要一個File的時候,需要從新拷貝一份,把File存儲在設備上,
然后再使用。
public static void writeBytesToFile(InputStream is, File file) throws IOException{ FileOutputStream fos = null; try { byte[] data = new byte[2048]; int nbread = 0; fos = new FileOutputStream(file); while((nbread=is.read(data))>-1){ fos.write(data,0,nbread); } } catch (Exception ex) { logger.error("Exception",ex); } finally{ if (fos!=null){ fos.close(); } } }
或者直接InputStream轉換為String,然后執行其他操作.
AssetManager am = getActivity().getAssets(); InputStream inputStream = am.open("chapter1/ObservableVSIterator.java"); String json = null; try { int size = inputStream.available(); byte[] buffer = new byte[size]; inputStream.read(buffer); inputStream.close(); json = new String(buffer, "UTF-8"); } catch (IOException ex) { ex.printStackTrace(); return null; }