Android DocumentFile 基本使用

时间:2025-01-25 10:44:33
// 包名/file目录 public static final String NOTE_BOOK_FILES_URI = "content:///tree/primary%3AAndroid%2Fdata/document/primary%3AAndroid%2Fdata%%2Ffiles"; //判断文件是否存在 DocumentFile Uri filesUri = Uri.parse(NOTE_BOOK_FILES_URI); boolean isExistsFilesDir = DocumentFile.fromSingleUri(mContext, filesUri).exists(); //不存在则创建 packageUri为父目录树 if (!isExistsFilesDir) { try { filesUri = DocumentsContract.createDocument(mContext.getContentResolver(), packageUri, "/directory", "files"); } catch (FileNotFoundException e) { e.printStackTrace(); } } //复制文件 File to DocumentFile DocumentsContract public static void fileToDocumentFile(Context context, File originFile, String fileName, Uri parentUri) { //String fileName = (); try { InputStream in = new FileInputStream(originFile); Uri documentFile = DocumentsContract.createDocument(context.getContentResolver(), parentUri, "*/*", fileName); //DocumentFile写入流 OutputStream out = context.getContentResolver().openOutputStream(documentFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } // 读取DocumentFile to File public static List<File> documentFileToFile(Context context) { List<File> allFile = new ArrayList<File>(); Uri dirUri = Uri.parse(Constant.NOTE_BOOK_FILES_URI); DocumentFile documentFile = DocumentFile.fromTreeUri(context, dirUri); //遍历DocumentFile DocumentFile[] files = documentFile.listFiles(); LogUtil.d(Constant.TAG, "documentFileToFile files count=" + files.length); for (DocumentFile file : files) { String fileName = file.getName(); Uri fileUri = file.getUri(); LogUtil.d(Constant.TAG, "documentFileToFile fileName=" + fileName + " fileUri=" + fileUri); try { //DocumentFile输入流 InputStream in = context.getContentResolver().openInputStream(fileUri); File newFile = new File(Constant.BACKUP_DIR_PATH, fileName); OutputStream out = new FileOutputStream(newFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); allFile.add(newFile); } catch (Exception e) { e.printStackTrace(); } } return allFile; }