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

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

需要申请的权限:

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

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

时间: 2024-08-26 08:22:59

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

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r

UNIX高级环境编程(5)Files And Directories - 文件相关时间,目录文件相关操作

?1 File Times 每个文件会维护三个时间字段,每个字段代表的时间都不同.如下表所示: 字段说明: st_mtim(the modification time)记录了文件内容最后一次被修改的时间. st_ctim(the changed-status time)记录了文件的i-node最后一次被修改的时间,如修改文件权限位,修改文件所有者ID,修改关联到该文件的link数目. i-node中的信息和文件的实际内容是分离的,所以当更新i-node时,需要更新的时st_ctim(the ch

创建、删除文件和文件夹命令

今天学习了几个命令,是创建.删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令. 创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录. 二.mkdir命令使用格式 格式:mkdir [选项] DirName 三.mkdir命令功能 通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录.要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限(了解

Java获取路径方法&amp;相对路径读取xml文件方法

Java获取路径方法&相对路径读取xml文件方法 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用 (3).request.getSession().getServletContext().getRealPath("/");//获取工程的根路径

linux系列之1--文件系统+创建、删除文件和文件夹命令

1.概述 此系列是为自己做的一个总结,不是系统,主要目的是记录linux下我认为经常忘的方方面面. 2.文件系统 在linux下没有windows下的C.D盘的概念,而是目录和文件组成的一种层次结构,目录起点为根(root),其名为/.目录则为一个包含许多目录项的文件,在linux下所有东西都可以当成文件来看待,每个目录最少有2个文件 一个.代表自己,一个..代表上一层目录. linux下每个文件都具有属性信息,信息有:文件属性(普通文件.文件夹.可执行文件).文件大小.文件所有者.文件权限.最

win10正式版如何创建无法删除文件夹

通常情况下,文件夹是可以随意被删除的,但是一旦文件夹被删除,那么文件夹里面的文件可能就会丢失,因此可以建立一个别人无法删除的文件夹.那么,要怎么创建无法删除的文件夹呢?此文就为大家分享win10正式版如何创建无法删除文件夹. 1.首先可以在快捷键win+r,直接打开“运行”窗口,并输入cmd命令回车. 2.接着可以在“命令提示符”窗口中,并在D盘创建一个无法删除的文件夹,命令提示符框中输入“md d:\wendang..\ ”按回车. 3.并直接在D盘,并会看到刚创建的赌钱网站了. 4.然后可以

java创建和删除文件夹及文件

//新建一个文件夹 public void newFolder(String folderPath) { try { String filePath = folderPath; File myFilePath = new File(filePath); if (!myFilePath.exists()) { myFilePath.mkdir(); } } catch (Exception e) { System.out.println("新建文件夹操作出错"); e.printStac

java file 操作之创建、删除文件及文件夹

本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹.java删除文件.java获取指定目录的全部文件.java判断指定路径是否为目录以及java搜索指定目录的全部内容等.请看下面实例. 创建文件File 的两个常量(File.separator.File.pathSeparator). 直接在windows下使用\进行分割是可以的.但是在linux下就不是\了.所以,要想使得我们的代码跨平台,更加健壮,所以,大家都采用这两个常量吧. public static void cre

ios 下创建,删除文件夹的方法

NSString *imageDir = [NSString stringWithFormat:@"%@/Caches/%@", NSHomeDirectory(), dirName]; BOOL isDir = NO; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL existed = [fileManager fileExistsAtPath:imageDir isDirectory:&is