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