以前的代碼拿過來總結,意外的就整成一個類了,不過倒也方便,我也不闡述了,就直接說怎麼用吧
1.首先肯定是在AndroidManifest的文件里加寫入SD卡的權限,代碼如下:
<!--SD卡讀寫的權限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2.興建一個類,我這邊名字命名的是FileOperations
package cc.booku.owlbox.FileOperations;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import java.io.File;
import java.io.RandomAccessFile;
/**
* Created by yangwenlong on 2020/5/16.
*/
public class FileoOperations {
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"};
public static void verifyStoragePermissions(Activity activity) {
try {
//檢測是否有寫的權限
int permission = ActivityCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 沒有寫的權限,去申請寫的權限,會彈出對話框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeData(String url, String name, String content) {
String filePath = url;
String fileName = name + ".txt";
writeTxtToFile(content, filePath, fileName);
}
// 將字符串寫入到文本文件中
private static void writeTxtToFile(String strcontent, String filePath, String fileName) {
//生成文件夾之後,再生成文件,不然會出錯
makeFilePath(filePath, fileName);
String strFilePath = filePath + fileName;
// 每次寫入時,都換行寫
String strContent = strcontent + "\r\n";
try {
File file = new File(strFilePath);
if (!file.exists()) {
Log.d("TestFile", "Create the file:" + strFilePath);
file.getParentFile().mkdirs();
file.createNewFile();
}
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.seek(file.length());
raf.write(strContent.getBytes());
raf.close();
} catch (Exception e) {
Log.e("TestFile", "Error on write File:" + e);
}
}
//生成文件
private static File makeFilePath(String filePath, String fileName) {
File file = null;
makeRootDirectory(filePath);
try {
file = new File(filePath + fileName);
if (!file.exists()) {
file.createNewFile();
}
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
//判斷文件是否存在
public static boolean fileIsExists(String strFile) {
try {
File f = new File(strFile);
if (!f.exists()) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
//生成文件夾
public static void makeRootDirectory(String filePath) {
File file = null;
try {
file = new File(filePath);
//不存在就新建
if (!file.exists()) {
file.mkdir();
}
} catch (Exception e) {
Log.i("error:", e + "");
}
}
}
3.在activity裏面調用,我這邊給個案例
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //申請SD卡讀寫的權限 FileoOperations.verifyStoragePermissions(MainActivity.this); //創建文件夾 FileoOperations.makeRootDirectory("/storage/emulated/0/OwlDatabase/"); //創建文件並寫入數據 wtest(); }
//對應的函數
private void wtest() { //判斷文件是否存在 if (!FileoOperations.fileIsExists("/storage/emulated/0/OwlDatabase/" + i + "name" + ".txt")){ //writeData(文件路徑,文件名,要寫入的字符串) FileoOperations.writeData("/storage/emulated/0/OwlDatabase/", i + "name", "添加Flag把狀態欄設爲可繪製模式"); } }
至此就寫入完成了~