Android studio 將字符串寫(xiě)入本地的操作方法
File 類(lèi)的操作:
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,"沒(méi)有獲取權(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)) {//這里可以寫(xiě)個(gè)對(duì)話框之類(lèi)的項(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,"沒(méi)有獲取讀取手機(jī)權(quán)限,請(qǐng)到應(yīng)用中心手動(dòng)打開(kāi)該權(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{
// 沒(méi)有獲取到權(quán)限,做特殊處理
Log.e(TAG,"沒(méi)有獲取到權(quán)限");
Toast.makeText(MainActivity.this,"沒(méi)有獲取讀取手機(jī)權(quán)限,請(qǐng)到應(yīng)用中心手動(dòng)打開(kāi)該權(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í)候要用字符流 萬(wàn)一里面有中文
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 將字符串寫(xiě)入本地的操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android?Studio中如何修改APP圖標(biāo)和APP名稱(chēng)
這篇文章主要介紹了Android?Studio中如何修改APP圖標(biāo)和APP名稱(chēng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)
LeanCloud是一種簡(jiǎn)單高效的數(shù)據(jù)和文件存儲(chǔ)服務(wù),本文主要介紹了利用LeanCloud來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12
詳解Flutter自定義應(yīng)用程序內(nèi)鍵盤(pán)的實(shí)現(xiàn)方法
本文將展示如何利用Flutter創(chuàng)建自定義鍵盤(pán)小部件,用于在自己的應(yīng)用程序中的Flutter TextField中輸入文本,感興趣的小伙伴可以了解一下2022-06-06
Android繼承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-08
Android圖片的Base64編碼與解碼及解碼Base64圖片方法
Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的方法。接下來(lái)通過(guò)本文給大家分享Android圖片的Base64編碼與解碼及解碼Base64圖片,需要的朋友參考下吧2017-12-12
Android應(yīng)用開(kāi)發(fā)中單元測(cè)試分析
這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)中單元測(cè)試的作用,以及何為單元測(cè)試,深入學(xué)習(xí)Android應(yīng)用開(kāi)發(fā)中單元測(cè)試,需要的朋友可以參考下2015-12-12
Android 實(shí)現(xiàn)廣告歡迎界面(倒計(jì)時(shí))
前些時(shí)候就是別人問(wèn)我他的android APP怎么做一個(gè)廣告的歡迎界面,就是過(guò)幾秒后自動(dòng)跳轉(zhuǎn)到主界面的實(shí)現(xiàn)。下面通過(guò)本文給大家介紹Android 實(shí)現(xiàn)廣告歡迎界面(倒計(jì)時(shí))的方法,需要的朋友參考下吧2017-12-12
Android App中ViewPager所帶來(lái)的滑動(dòng)沖突問(wèn)題解決方法
Android中我們經(jīng)常使用ViewPager配合Fragment實(shí)現(xiàn)視圖滑動(dòng),但在實(shí)際操作中又會(huì)經(jīng)常發(fā)生方向上的沖突問(wèn)題,這里我們就來(lái)總結(jié)一下Android App中ViewPager所帶來(lái)的滑動(dòng)沖突問(wèn)題解決方法:2016-06-06

