• 【方法总结】创建、读取、删除文件相关操作


     总结一波文件操作相关的共通方法(拿来就用)

     需要申请的权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     1.获取文件夹下的所有文件名

    public static List<String> getFileName(String fileName) {
        List<String> fileList = new ArrayList<>();
        File file = new File(fileName);
        if (!file.exists()) {
            return null;
        }
        File f[] = file.listFiles();
        for (int i = 0; i < f.length; i++) {
            File fs = f[i];
            if (!fs.isDirectory()) {
                fileList.add(fs.getName());
            }
        }
        return fileList;
    }

     2.在SD卡上创建文件

    public static File createFile(String fileName) throws IOException {
        File file = new File(fileName);
        if (!isFileExists(file)) {
            if (file.isDirectory()) {
                file.mkdirs();
            } else {
                file.createNewFile();
            }
        }
        return file;
    }

     3.在SD卡上创建文件夹

    public static File createFolder(String fileName) throws IOException {
        File file = new File(fileName);
        if (!isFileExists(file)) {
            file.mkdirs();
        }
        return file;
    }

     4.读取SD卡中文本文件

    public synchronized static String readFile(String fileName) {
        StringBuffer sb = new StringBuffer();
        File file = new File(fileName);
        String str = null;
        try {
            InputStream is = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            @SuppressWarnings("resource")
            BufferedReader reader = new BufferedReader(isr);
            while ((str = reader.readLine()) != null) {
                sb.append(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

     5.删除单个文件

    public static boolean deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.isFile() && file.exists()) {
            return file.delete();
        }
        return false;
    }

     filePath 被删除文件的文件名

     return 文件删除成功返回true,否则返回false。

     6.删除文件夹以及其目录下的文件

    public static boolean deleteFolder(String filePath) {
        boolean flag = false;
        // 如果filePath不以文件分隔符结尾,自动添加文件分隔符
        if (!filePath.endsWith(File.separator)) {
            filePath = filePath + File.separator;
        }
        File dirFile = new File(filePath);
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        flag = true;
        File[] files = dirFile.listFiles();
        // 遍历删除文件夹下的所有文件(包括子目录)
        for (File file : files) {
            if (file.isFile()) {
                // 删除子文件
                flag = deleteFile(file.getAbsolutePath());
                if (!flag)
                    break;
            } else {
                // 删除子目录
                flag = deleteFolder(file.getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag)
            return false;
        // 删除当前空目录
        return dirFile.delete();
    }

     filePath 被删除目录的文件路径
     return 目录删除成功返回true,否则返回false

     7.把文件转换成Base64

    public static String encodeBase64File(String path) throws Exception {
        byte[] videoBytes;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        @SuppressWarnings("resource")
        FileInputStream fis = new FileInputStream(new File(path));
        byte[] buf = new byte[1024];
        int n;
        while (-1 != (n = fis.read(buf))) {
            baos.write(buf, 0, n);
        }
        videoBytes = baos.toByteArray();
        return Base64.encodeToString(videoBytes, Base64.NO_WRAP);
    }

     8.根据相册媒体库路径转换成SD卡路径(Android 4.4以上)

    @TargetApi(Build.VERSION_CODES.KITKAT)
    public static String getPath(final Context context, final Uri uri) {
        final boolean isOverKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
        // DocumentProvider
        if (isOverKitKat && DocumentsContract.isDocumentUri(context, uri)) {
            // ExternalStorageProvider
            if (isExternalStorageDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];
                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/"
                            + split[1];
                }
            }
            // DownloadsProvider
            else if (isDownloadsDocument(uri)) {
                final String id = DocumentsContract.getDocumentId(uri);
                final Uri contentUri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"),
                        Long.valueOf(id));
                return getDataColumn(context, contentUri, null, null);
            }
            // MediaProvider
            else if (isMediaDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];
                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                final String selection = "_id=?";
                final String[] selectionArgs = new String[]{split[1]};
                return getDataColumn(context, contentUri, selection,
                        selectionArgs);
            }
        }
        // MediaStore (and general)
        else if ("content".equalsIgnoreCase(uri.getScheme())) {
            // Return the remote address
            if (isGooglePhotosUri(uri))
                return uri.getLastPathSegment();
            return getDataColumn(context, uri, null, null);
        }
        // File
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }
        return null;
    }

     上面方法可能需要下列辅助方法的支持:

    public static boolean isFileExists(File file) {
        return file.exists();
    }
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());
    }
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
    }
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());
    }
    public static boolean isGooglePhotosUri(Uri uri) {
        return "com.google.android.apps.photos.content".equals(uri.getAuthority());
    }
    @SuppressLint("NewApi")
    public static String getDataColumn(Context context, Uri uri,
                                       String selection, String[] selectionArgs) {
        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = {column};
        try {
            cursor = context.getContentResolver().query(uri, projection,
                    selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                final int index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

     长期更新,未完待续。。。

  • 相关阅读:
    Json 基于jQuery+JSON的省市联动效果
    事务隔离级别的理解
    java实现爬虫功能
    最简单的文件上传
    SpringMVC视图解析器
    Date类型与字符串之间的转换
    Java:过去、未来的互联网编程之王
    cocos2d-x游戏开发之动画
    CCF真题之模板生成系统
    CCF真题之日期计算
  • 原文地址:https://www.cnblogs.com/cnwutianhao/p/6767870.html
Copyright © 2020-2023  润新知