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

效果图

你可能感兴趣的:(Android)