編輯:關於Android編程
在深入分析Java中的I/O類的特征及適用場合 一文中,我詳細介紹了Java中的I/O,但是,如果以為Android中的I/O與Java中一樣,那就大錯特錯了。實際上,它們有一定的相同之外,但更多的是區別,因為Android系統中的文件存放位置不同,讀取方式也不一樣。下面將詳細介紹Android中的文件讀寫:
一、資源文件的讀取,不需要在Manifest文件中添加權限
1.從resource中的asset中讀取文件,要注意的是asset中的文件只能讀而不能寫
public static void readFromAsset(Context context,String fileName) { try { InputStream in=context.getResources().getAssets().open(fileName); int length=in.available(); byte[]buffer=new byte[length]; in.read(buffer); in.close(); String content=new String(buffer,UTF-8); ToastUtils.showShortToast(context, content); } catch(IOException e) { e.printStackTrace(); } }2.從resource的raw中讀取文件,與上面的一樣,也是只能讀取而不能寫入
public static void readFromRaw(Context context,int rawResId) { InputStream in=context.getResources().openRawResource(rawResId); try { int length=in.available(); byte[]buffer=new byte[length]; in.read(buffer); String res=EncodingUtils.getString(buffer, UTF-8); } catch(IOException ex) { ex.printStackTrace(); } finally { if(in!=null) { try { in.close(); } catch(Exception e) { e.printStackTrace(); } } } }看到上面兩段示例代碼可能有人會問,會什麼不想Java中那樣使用try(InputStream in=context.getResources().getAssets().open(fileName))這種autoclose的方式,但是實際上它需要Java SE1.7的版本才支持,而目前的Android版本並不支持,因而無法使用這種方法。
二、讀寫應用包名目錄(即/data/data/packagename)下的文件
首先是讀文件
public static void readFromPackage(Context context,String fileName) { try { FileInputStream fis=context.openFileInput(fileName); int length=fis.available(); byte[]buffer=new byte[length]; fis.read(buffer); String content=new String(buffer,UTF-8); ToastUtils.showLongToast(context, content); } catch(IOException ex) { ex.printStackTrace(); } }然後是寫文件,注意權限最好是Context.MODE_PRIVATE,否則有時候會觸犯安全紅線。目前的模式主要有以下幾種:
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中,可以使用Context.MODE_APPEND;
Context.MODE_APPEND:該模式會檢查文件是否存在,若存在就往文件追加內容,否則就創建新文件;
Context.MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
Context.WORLD_WRITEABLE:表示當前文件可以被其他應用寫入;
public static void writeToPackage(Context context,String fileName,String str) { try { FileOutputStream fos=context.openFileOutput(fileName,Context.MODE_PRIVATE); byte[]buffer=str.getBytes(); fos.write(buffer); fos.close(); } catch(IOException ex) { ex.printStackTrace(); } }三、讀寫sd卡中的文件,注意要添加以下權限:
首先是從SD卡讀取文件
public void readFromSdcard(Context context,String fileName) { try { FileInputStream fis=new FileInputStream(fileName); int length=fis.available(); byte[]buffer=new byte[length]; fis.read(buffer); String content=new String(buffer,UTF-8); ToastUtils.showLongToast(context, content); } catch(IOException ex) { ex.printStackTrace(); } }然後是寫入文件到SD卡:
public static void writeToSdCardFile(byte[]buffer,Context context,String fileName) { try { FileOutputStream fos=new FileOutputStream(fileName); fos.write(buffer); fos.close(); } catch(IOException ex) { ex.printStackTrace(); } }當然,上面只是進行了最基礎的示例,至於獲取到文件流之後的包裝問題(如采用緩沖流等),就深入分析Java中的I/O類的特征及適用場合 一文中介紹得完全一樣了,也建議在實際使用時不要采用最基本的文件操作流,由於在之前的文章中詳細講過,這裡就不展開討論了。
這篇博文中主要從以下幾點進行敘述: 1、Android Studio安裝與使用 2、Android Studio特
簡介這個輪子是對RecyclerView的封裝,主要完成了下拉刷新、上拉加載更多、RecyclerView頭部。在我的Material Design學習項目中使用到了項目
開篇先介紹幾個放在眼前卻經常忽視的快捷鍵如圖:展現出android Studio超強的搜索能力,提高大工程的開發維護效率。雙擊Shift按鍵效果Ctrl+Shift+N
效果圖 概述:ItemTouchHelperAdapter:(★)RecyclerListAdapter需要實現這個接口,RecyclerListAdapter