Android — 建立檔案及資料夾
阿新 • • 發佈:2019-01-09
Android 建立檔案及資料夾
說明
Android 中建立檔案及資料夾,實際上用的都是基本的 java 語法,和普通的 java 程式不同的是:
如果要訪問 SD 卡,需要配置許可權,而且在 API 23 上,需要考慮執行時許可權檢查。
寫 SD 卡的許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
建立/刪除檔案的許可權:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
建立單個檔案 : File.createNewFile()
建立資料夾但不會建立缺失的父資料夾: File.mkdir()
建立資料夾並且建立缺失的父資料夾:File.mkdirs()
Demo
建立一個工具類 FileUtils,來統一提供建立檔案和資料夾的功能
package com.yu.demos.utils;
import android.util.Log;
import java.io.File;
import java.io.IOException;
/**
* 建立檔案 和 資料夾
* Created by yu on 2016/8/21.
*/
public class FileUtils {
private static final String TAG = "FileUtils";
public static final int FLAG_SUCCESS = 1;//建立成功
public static final int FLAG_EXISTS = 2;//已存在
public static final int FLAG_FAILED = 3;//建立失敗
/**
* 建立 單個 檔案
* @param filePath 待建立的檔案路徑
* @return 結果碼
*/
public static int CreateFile(String filePath) {
File file = new File(filePath);
if (file.exists()) {
Log.e(TAG,"The file [ " + filePath + " ] has already exists");
return FLAG_EXISTS;
}
if (filePath.endsWith(File.separator)) {// 以 路徑分隔符 結束,說明是資料夾
Log.e(TAG,"The file [ " + filePath + " ] can not be a directory");
return FLAG_FAILED;
}
//判斷父目錄是否存在
if (!file.getParentFile().exists()) {
//父目錄不存在 建立父目錄
Log.d(TAG,"creating parent directory...");
if (!file.getParentFile().mkdirs()) {
Log.e(TAG,"created parent directory failed.");
return FLAG_FAILED;
}
}
//建立目標檔案
try {
if (file.createNewFile()) {//建立檔案成功
Log.i(TAG, "create file [ " + filePath + " ] success");
return FLAG_SUCCESS;
}
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG,"create file [ " + filePath + " ] failed");
return FLAG_FAILED;
}
return FLAG_FAILED;
}
/**
* 建立 資料夾
* @param dirPath 資料夾路徑
* @return 結果碼
*/
public static int createDir (String dirPath) {
File dir = new File(dirPath);
//資料夾是否已經存在
if (dir.exists()) {
Log.w(TAG,"The directory [ " + dirPath + " ] has already exists");
return FLAG_EXISTS;
}
if (!dirPath.endsWith(File.separator)) {//不是以 路徑分隔符 "/" 結束,則新增路徑分隔符 "/"
dirPath = dirPath + File.separator;
}
//建立資料夾
if (dir.mkdirs()) {
Log.d(TAG,"create directory [ "+ dirPath + " ] success");
return FLAG_SUCCESS;
}
Log.e(TAG,"create directory [ "+ dirPath + " ] failed");
return FLAG_FAILED;
}
}
測試使用:
package com.yu.demos.activity;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import com.yu.demos.R;
import com.yu.demos.utils.FileUtils;
/**
* 建立檔案 及 資料夾的 demo
* Created by yu on 2016/8/22.
*/
public class CreateFileDemo extends AppCompatActivity {
private TextView tvResult;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_file);
tvResult = (TextView) findViewById(R.id.tv_result);
}
/**
* 建立單個檔案
* @param view 建立檔案按鈕
*/
public void createAFile(View view) {
//獲取 SD 卡路徑
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
int result = FileUtils.CreateFile(path + "/demos/file/test.txt");
showResult(result);
}
/**
* 建立資料夾
* @param view 建立資料夾按鈕
*/
public void createADirectory(View view) {
//獲取 SD 卡路徑
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
int result = FileUtils.createDir(path + "/demos/file/tmp/test");
showResult(result);
}
/**
* 顯示結果
* @param result 結果碼
*/
private void showResult (int result) {
switch (result) {
case FileUtils.FLAG_SUCCESS:
tvResult.setText("result: create success");
break;
case FileUtils.FLAG_EXISTS:
tvResult.setText("result: already exist");
break;
case FileUtils.FLAG_FAILED:
tvResult.setText("result: create failed");
break;
}
}
}