1. 程式人生 > >Android — 建立檔案及資料夾

Android — 建立檔案及資料夾

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;
        }
    }
}

效果圖