Android studio 將字符串寫入本地的操作方法
File 類的操作:
1.首先需要添加相關(guān)權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
注意6.0以上需要?jiǎng)討B(tài)申請(qǐng):
private void checkPermission(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0以上 int permission = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.RECEIVE_SMS); int permission1 = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if(permission != PackageManager.PERMISSION_GRANTED && permission1 != PackageManager.PERMISSION_GRANTED) { Log.e(TAG,"沒有獲取權(quán)限,請(qǐng)申請(qǐng)"); // 申請(qǐng)一個(gè)(或多個(gè))權(quán)限,并提供用于回調(diào)返回的獲取碼(用戶定義) if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {//這里可以寫個(gè)對(duì)話框之類的項(xiàng)向用戶解釋為什么要申請(qǐng)權(quán)限,并在對(duì)話框的確認(rèn)鍵后續(xù)再次申請(qǐng)權(quán)限 Log.e(TAG,"提示"); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS,Manifest.permission.WRITE_EXTERNAL_STORAGE}, CODE_READ_SMS); } else { //申請(qǐng)權(quán)限,字符串?dāng)?shù)組內(nèi)是一個(gè)或多個(gè)要申請(qǐng)的權(quán)限,1是申請(qǐng)權(quán)限結(jié)果的返回參數(shù),在onRequestPermissionsResult可以得知申請(qǐng)結(jié)果 Log.e(TAG,"您已禁止"); Toast.makeText(MainActivity.this,"沒有獲取讀取手機(jī)權(quán)限,請(qǐng)到應(yīng)用中心手動(dòng)打開該權(quán)限",Toast.LENGTH_SHORT).show(); } }else{ Log.e(TAG,"獲取到了權(quán)限"); } }else{ Log.e(TAG,"獲取到了權(quán)限"); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode == CODE_READ_SMS){ if(grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.e(TAG,"獲取到了權(quán)限"); } else{ // 沒有獲取到權(quán)限,做特殊處理 Log.e(TAG,"沒有獲取到權(quán)限"); Toast.makeText(MainActivity.this,"沒有獲取讀取手機(jī)權(quán)限,請(qǐng)到應(yīng)用中心手動(dòng)打開該權(quán)限",Toast.LENGTH_SHORT).show(); } } }
2.saveToFile
a)BufferedWriter 追加
//保存文件到sd卡 public void saveToFile(String content) { BufferedWriter out = null; //獲取SD卡狀態(tài) String state = Environment.getExternalStorageState(); //判斷SD卡是否就緒 if (!state.equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "請(qǐng)檢查SD卡", Toast.LENGTH_SHORT).show(); return; } //取得SD卡根目錄 File file = Environment.getExternalStorageDirectory(); try { Log.e(TAG, "======SD卡根目錄:" + file.getCanonicalPath()); if(file.exists()){ LOG.e(TAG, "file.getCanonicalPath() == " + file.getCanonicalPath()); } /* 輸出流的構(gòu)造參數(shù)1:可以是File對(duì)象 也可以是文件路徑 輸出流的構(gòu)造參數(shù)2:默認(rèn)為False=>覆蓋內(nèi)容; true=>追加內(nèi)容 */ out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file.getCanonicalPath() + "/readMsg.txt",true))); out.newLine(); out.write(content); Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
b)FileWriter追加
/** * 使用FileWriter進(jìn)行文本內(nèi)容的追加 * @param file * @param content */ private void addTxtToFileWrite(File file, String content){ FileWriter writer = null; try { //FileWriter(file, true),第二個(gè)參數(shù)為true是追加內(nèi)容,false是覆蓋 writer = new FileWriter(file, true); writer.write("\r\n");//換行 writer.write(content); } catch (IOException e) { e.printStackTrace(); } finally { try { if(writer != null){ writer.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
3.readFromFile()
//從SD卡讀取文件 public String readFromFile() { //讀的時(shí)候要用字符流 萬一里面有中文 BufferedReader reader = null; FileInputStream fis; StringBuilder sbd = new StringBuilder(); String state = Environment.getExternalStorageState(); if (!state.equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD卡未就緒", Toast.LENGTH_SHORT).show(); return ""; } File root = Environment.getExternalStorageDirectory(); try { fis = new FileInputStream(root + "/readMsg.txt"); reader = new BufferedReader(new InputStreamReader(fis)); String row; while ((row = reader.readLine()) != null) { sbd.append(row); } } catch (FileNotFoundException e) { Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); //e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sbd.toString(); }
4.removeFromFile()
//刪除SD卡文件 public void removeFromFile() { String state = Environment.getExternalStorageState(); if (!state.equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "SD卡未就緒", Toast.LENGTH_SHORT).show(); return; } //取得SD卡根目錄 File root = Environment.getExternalStorageDirectory(); File myFile=new File(root+"/sd.txt"); //File myFile=new File(root,"sd.txt"); if (myFile.exists()) { myFile.delete(); Toast.makeText(this,"文件已刪除",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(this,"文件不存在",Toast.LENGTH_SHORT).show(); } } }
總結(jié)
以上所述是小編給大家介紹的Android studio 將字符串寫入本地的操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android?Studio中如何修改APP圖標(biāo)和APP名稱
這篇文章主要介紹了Android?Studio中如何修改APP圖標(biāo)和APP名稱,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)
LeanCloud是一種簡(jiǎn)單高效的數(shù)據(jù)和文件存儲(chǔ)服務(wù),本文主要介紹了利用LeanCloud來進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12詳解Flutter自定義應(yīng)用程序內(nèi)鍵盤的實(shí)現(xiàn)方法
本文將展示如何利用Flutter創(chuàng)建自定義鍵盤小部件,用于在自己的應(yīng)用程序中的Flutter TextField中輸入文本,感興趣的小伙伴可以了解一下2022-06-06Android繼承ViewGroup實(shí)現(xiàn)Scroll滑動(dòng)效果的方法示例
這篇文章主要介紹了Android繼承ViewGroup實(shí)現(xiàn)Scroll滑動(dòng)效果的方法,結(jié)合實(shí)例形式分析了Android滑動(dòng)效果的原理及擴(kuò)展ViewGroup實(shí)現(xiàn)滑動(dòng)功能的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Android圖片的Base64編碼與解碼及解碼Base64圖片方法
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。接下來通過本文給大家分享Android圖片的Base64編碼與解碼及解碼Base64圖片,需要的朋友參考下吧2017-12-12Android應(yīng)用開發(fā)中單元測(cè)試分析
這篇文章主要介紹了Android應(yīng)用開發(fā)中單元測(cè)試的作用,以及何為單元測(cè)試,深入學(xué)習(xí)Android應(yīng)用開發(fā)中單元測(cè)試,需要的朋友可以參考下2015-12-12Android 實(shí)現(xiàn)廣告歡迎界面(倒計(jì)時(shí))
前些時(shí)候就是別人問我他的android APP怎么做一個(gè)廣告的歡迎界面,就是過幾秒后自動(dòng)跳轉(zhuǎn)到主界面的實(shí)現(xiàn)。下面通過本文給大家介紹Android 實(shí)現(xiàn)廣告歡迎界面(倒計(jì)時(shí))的方法,需要的朋友參考下吧2017-12-12Android App中ViewPager所帶來的滑動(dòng)沖突問題解決方法
Android中我們經(jīng)常使用ViewPager配合Fragment實(shí)現(xiàn)視圖滑動(dòng),但在實(shí)際操作中又會(huì)經(jīng)常發(fā)生方向上的沖突問題,這里我們就來總結(jié)一下Android App中ViewPager所帶來的滑動(dòng)沖突問題解決方法:2016-06-06