Android讀寫文件工具類詳解
本文實(shí)例為大家分享了Android讀寫文件工具類的具體代碼,供大家參考,具體內(nèi)容如下
public class Utils {
private static String path1 = Environment.getExternalStorageDirectory().getAbsolutePath();
private static String path2 = Environment.getDownloadCacheDirectory().getAbsolutePath();
private static String pathExt = "/111/222/333/444/555/";
private static String fileName = "6.txt";
public static void write(String str) {
String filePath = null;
boolean hasSDCard =Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (hasSDCard) {
filePath = path1 + pathExt + fileName;
} else {
filePath = path2 + pathExt + fileName;
}
try {
File file = new File(filePath);
if (!file.exists()) {
//mkdirs()方法生成多層文件夾
//mkdir()方法生成一層層文件夾
// File dir = new File(file.getParent());
// dir.mkdirs();
file.getParentFile().mkdirs();//生成文件外層的文件夾
file.createNewFile();//生成文件
}
FileOutputStream os = new FileOutputStream(file);
os.write(str.getBytes());
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String read() {
String content = "";
String filePath;
boolean sdcard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (sdcard) {
filePath = path1 + pathExt + fileName;
} else {
filePath = path2 + pathExt + fileName;
}
try {
File file = new File(filePath);
if (file.exists()) {
FileInputStream is = new FileInputStream(file);
InputStreamReader inputReader = new InputStreamReader(is);//設(shè)置流讀取方式
BufferedReader buffReader = new BufferedReader(inputReader);
String line;
try {
while (null != (line = buffReader.readLine())) {
content += line + "\n";//讀取的文件容
}
is.close();//關(guān)閉輸入流
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != is) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return content;
}
}
1. 清單文件中添加讀寫權(quán)限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.Android6.0以上版本要?jiǎng)討B(tài)申請(qǐng)讀寫權(quán)限
ArrayList<String> permissionList = new ArrayList<>();
private String[] permissions = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
//檢測(cè)是否有寫的權(quán)限
//判斷手機(jī)版本,如果低于6.0 則不用申請(qǐng)權(quán)限,直接拍照
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(permissions[0]) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permissions[0]);
}
if (checkSelfPermission(permissions[1]) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permissions[1]);
}
if (!permissionList.isEmpty()) {
String[] permissions1 = permissionList.toArray(new String[permissionList.size()]);
requestPermissions(permissions1, 1);
} else {
Utils.write("balabala");
Utils.read();
}
} else {
Utils.write("balabala");
Utils.read();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if (PackageManager.PERMISSION_GRANTED == grantResults[0]){
Utils.write("balabala");
Utils.read();
} else {
Log.d(TAG, "fail: ");
}
break;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android 開發(fā)教程之日歷項(xiàng)目實(shí)踐(二)
決定開始學(xué)習(xí) Android 平臺(tái)下的軟件開發(fā),以日歷作為實(shí)踐項(xiàng)目,進(jìn)行一周后,基本完成,有需要的朋友可以參考下2013-01-01
WorkManager解決應(yīng)用退出后繼續(xù)運(yùn)行后臺(tái)任務(wù)
這篇文章主要為大家介紹了WorkManager解決應(yīng)用退出后繼續(xù)運(yùn)行后臺(tái)任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Android實(shí)現(xiàn)日期時(shí)間選擇對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)日期以及時(shí)間選擇對(duì)話框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Android之利用EventBus發(fā)送消息傳遞示例
本篇文章主要介紹了Android之利用EventBus進(jìn)行消息傳遞示例。EventBus是一款針對(duì)Android優(yōu)化的發(fā)布/訂閱事件總線,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02
Android AlertDialog六種創(chuàng)建方式案例詳解
這篇文章主要介紹了Android AlertDialog六種創(chuàng)建方式案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Flutter組件實(shí)現(xiàn)進(jìn)度指示器
這篇文章主要為大家詳細(xì)介紹了Flutter組件實(shí)現(xiàn)進(jìn)度指示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Kotlin高階函數(shù)reduce與fold使用實(shí)例
Kotlin的高階函數(shù)reduce和fold可以用來(lái)對(duì)集合進(jìn)行聚合操作。reduce函數(shù)將集合元素逐個(gè)累加,而fold函數(shù)則可以指定一個(gè)初始值進(jìn)行累加。這兩個(gè)函數(shù)在處理大數(shù)據(jù)集時(shí)非常有用2023-04-04

