摘要:內部存儲內部存儲是指將應用程序中的數據以文件方式存儲到設備的內部存儲空間中該文件位于目錄下。因為外圍存儲是全局可讀寫的,對于無需訪問限制以及您希望與其他應用共享或允許用戶使用電腦訪問的文件,外部存儲是最佳位置。
內部存儲
內部存儲是指將應用程序中的數據以文件方式存儲到設備的內部存儲空間中(該文件位于 data/data/
/ 目錄下)。
一般情況下應用保存在內存下的數據其他應用是訪問不了的,當您希望確保用戶或其他應用均無法訪問您的文件時,內部存儲是最佳選擇。用戶卸載該應用的同時存儲在內存中的數據會一并刪除。
getFilesDir() :返回該應用的內部目錄(data/data/
/)
在應用目錄里新建文件
File file = new File(getFileDir(), filename);
應用中一般會把一些數據存入緩存中,可以減少訪問服務器的次數,節省用戶的流量
getCacheDir():返回該應用緩存文件的目錄(data/data/
/cache/)
File file = File.createTempFile(fileName, null, context.getCacheDir());
寫數據
FileOutputStream openFileOutput(String name, int mode);
/**寫文本信息到手機內存中 * @param filename : 文件名 * @param body : 文件的內容 * @throws Exception */ public void writePhone(String file, String body) throws Exception { FileOutputStream fos = null; try { fos = context.openFileOutput(file, Context.MODE_PRIVATE); fos.write(body.getBytes()); //寫文本信息到手機內存中 } catch (Exception e) { if(fos != null){ fos.close(); //關閉文件輸入流 } } }
其中,mode是讀寫文件的方式,通常使用的值有2種
MODE_PRIVATE:私有模式,只能被當前程序讀寫
MODE_APPEND:追加模式
讀數據
FileInputStream openFileInput(String name);
/**從手機內存中讀數據 * @param file : 文件名 * @return String : 返回讀到的文本信息 */ public String readPhone(String file) throws Exception { /** * 1、開辟輸入流 * 2、把讀取到的流數據存放到內存流中 * 3、返回讀取到的信息(String的形式返回) */ FileInputStream fis = context.openFileInput(file); //字節數組輸出流(內存流) ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024];//字節數組,緩存 int len = -1; while((len = fis.read(buffer)) != -1){ //把讀取的內容寫入到內存流中 baos.write(buffer, 0, len); } baos.close(); fis.close(); return baos.toString(); }
*
外部存儲
外部存儲是指將文件存儲到一些外圍設備上,如SDcard或設備內嵌的存儲卡等(該文件通常位于mnt/sdcard目錄下,由于手機有各種廠商生產,獲取SD卡根目錄一律采用Environment.getExternalStorageDirectory()這個方法)
由于外圍存儲設備可能被移除、丟失或者處于其他狀態,所以使用外圍設備之前要使用Environment.getExternalStorageState()方法來確認是否可用。因為外圍存儲是全局可讀寫的,對于無需訪問限制以及您希望與其他應用共享或允許用戶使用電腦訪問的文件,外部存儲是最佳位置。
寫數據
FileOutputStream 或 FileWriter
/**寫文件到sdcard中 * @param file * @param body */ public void writeSdcard(String file, String body) throws Exception { /** * 1、判斷sdcard的狀態 * 2、假如有sdcard,且正常 獲取sdcard的根路徑,并且通過傳過來的文件名進行創建或者打開該文件 * 3、寫數據到輸出流 * 4、關閉流 */ FileOutputStream fos = null; try{ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //取得sdcard的根路徑 File rootPath = Environment.getExternalStorageDirectory(); //創建要寫入sdcard的文件 File f = new File(rootPath, file); //開辟輸出流 fos = new FileOutputStream(f); fos.write(body.getBytes()); }finally { if(fos != null){ fos.close(); }else{ throw new RuntimeException("sdcard狀態錯誤"); } } }
讀數據
FileInputStream 或 FileReader
/** * 讀取sdcard中的文件 * @param file * @return * @throws Exception */ public String readSdcard(String file) throws Exception { FileInputStream fis = null; ByteArrayOutputStream baos = null; try{ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //取得sdcard的根目錄 File rootPath = Environment.getExternalStorageDirectory(); File f = new File(rootPath.getAbsolutePath()+ "/" + file); if(f.exists()){ //判斷文件是否存在 fis = new FileInputStream(f); //字節數組輸出流(內存流) baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; //字節數組,緩存 int len = -1; while((len = fis.read(buffer)) != -1){ //把讀取到的內容寫入到內存流中 baos.write(buffer, 0, len); } }else{ return null; } }else{ throw new RuntimeException("sdcard狀態錯誤"); } } finally{ if(baos != null){ baos.close(); } if(fis != null){ fis.close(); } } return baos.toString(); }
需要注意的是,讀寫外部數據時需要設置權限
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70579.html
摘要:前言音頻流轉發之音視頻直播音頻流轉發之能直播為什么不可以看完本系列文章,你就能做一個直播,真正的直播,包括音頻流的轉發,這也是我最近查看發現有相關能實現音頻流的轉發,所有打算分享系列文章供大家交流,如有不對之處請指正。 前言 web音頻流轉發之音視頻直播web音頻流轉發之AudioNodeapp能直播,web為什么不可以?看完本系列文章,你就能做一個直播,真正的直播,包括音頻流的轉發,...
閱讀 1202·2021-11-23 09:51
閱讀 1980·2021-10-08 10:05
閱讀 2339·2019-08-30 15:56
閱讀 1900·2019-08-30 15:55
閱讀 2640·2019-08-30 15:55
閱讀 2487·2019-08-30 13:53
閱讀 3498·2019-08-30 12:52
閱讀 1250·2019-08-29 10:57