Android DocumentFile 基本使用
// 包名/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;
}