/** * 指定したUriが存在する時にその下にファイルを生成するためのpathを返す * @param context * @param treeUri * @param mime * @param fileName * @return */ @Nullable @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static File createStorageFile(@NonNull final Context context, final Uri treeUri, final String mime, final String fileName) { Log.i(TAG, "createStorageFile:" + fileName); if (BuildCheck.isLollipop()) { if ((treeUri != null) && !TextUtils.isEmpty(fileName)) { final DocumentFile saveTree = DocumentFile.fromTreeUri(context, treeUri); final DocumentFile target = saveTree.createFile(mime, fileName); final String path = UriHelper.getPath(context, target.getUri()); if (!TextUtils.isEmpty(path)) { return new File(path); } } } return null; }
/** * 指定したUriが存在する時にその下にファイルを生成するためのpathを返す * @param context * @param treeUri * @param mime * @param fileName * @return */ @Nullable @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static File createStorageFile(@NonNull final Context context, final Uri treeUri, final String mime, final String fileName) { Log.i(TAG, "createStorageFile:" + fileName); if (BuildCheck.isLollipop()) { if ((treeUri != null) && !TextUtils.isEmpty(fileName)) { final DocumentFile saveTree = DocumentFile.fromTreeUri(context, treeUri); final DocumentFile target = saveTree.createFile(mime, fileName); final String path = UriHelper.getPath(context, target.getUri()); if (!TextUtils.isEmpty(path)) { return new File(path); } } } return null; }
/** * 指定したDocumentFileの下にファイルを生成する * dirsがnullまたは空文字列ならDocumentFile#createFileを呼ぶのと同じ * @param context * @param parent * @param dirs * @param mime * @param name * @return */ public static DocumentFile getStorageFile(@NonNull final Context context, @NonNull final DocumentFile parent, @Nullable final String dirs, final String mime, final String name) throws IOException { final DocumentFile tree = getStorage(context, parent, dirs); if (tree != null) { final DocumentFile file = tree.findFile(name); if (file != null) { if (file.isFile()) { return file; } else { throw new IOException("directory with same name already exists"); } } else { return tree.createFile(mime, name); } } return null; }
/** * 指定したDocumentFileの下にファイルを生成する * dirsがnullまたは空文字列ならDocumentFile#createFileを呼ぶのと同じ * @param context * @param parent * @param dirs * @param mime * @param name * @return */ public static DocumentFile getStorageFile(@NonNull final Context context, @NonNull final DocumentFile parent, @Nullable final String dirs, final String mime, final String name) throws IOException { final DocumentFile tree = getStorage(context, parent, dirs); if (tree != null) { final DocumentFile file = tree.findFile(name); if (file != null) { if (file.isFile()) { return file; } else { throw new IOException("directory with same name already exists"); } } else { return tree.createFile(mime, name); } } return null; }
return tree.createFile(mime, name);
/** * 指定したidに対応するUriが存在する時にその下に生成したファイルのrawファイルディスクリプタを返す * @param context * @param treeUri * @param mime * @param fileName * @return */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static int createStorageFileFD(@NonNull final Context context, final Uri treeUri, final String mime, final String fileName) { Log.i(TAG, "createStorageFileFD:" + fileName); if (BuildCheck.isLollipop()) { if ((treeUri != null) && !TextUtils.isEmpty(fileName)) { final DocumentFile saveTree = DocumentFile.fromTreeUri(context, treeUri); final DocumentFile target = saveTree.createFile(mime, fileName); try { final ParcelFileDescriptor fd = context.getContentResolver().openFileDescriptor(target.getUri(), "rw"); return fd != null ? fd.getFd() : 0; } catch (final FileNotFoundException e) { Log.w(TAG, e); } } } return 0; }
/** * 指定したidに対応するUriが存在する時にその下に生成したファイルのrawファイルディスクリプタを返す * @param context * @param treeUri * @param mime * @param fileName * @return */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static int createStorageFileFD(@NonNull final Context context, final Uri treeUri, final String mime, final String fileName) { Log.i(TAG, "createStorageFileFD:" + fileName); if (BuildCheck.isLollipop()) { if ((treeUri != null) && !TextUtils.isEmpty(fileName)) { final DocumentFile saveTree = DocumentFile.fromTreeUri(context, treeUri); final DocumentFile target = saveTree.createFile(mime, fileName); try { final ParcelFileDescriptor fd = context.getContentResolver().openFileDescriptor(target.getUri(), "rw"); return fd != null ? fd.getFd() : 0; } catch (final FileNotFoundException e) { Log.w(TAG, e); } } } return 0; } }
return tree.createFile(mime, name);
/** * 指定したUriが存在する時にその下に出力用ファイルを生成してOutputStreamとして返す * @param context * @param parent * @param dirs * @param mime * @param name * @return * @throws FileNotFoundException */ public static OutputStream getStorageOutputStream(@NonNull final Context context, @NonNull final DocumentFile parent, @Nullable final String dirs, final String mime, final String name) throws IOException { final DocumentFile tree = getStorage(context, parent, dirs); if (tree != null) { final DocumentFile file = tree.findFile(name); if (file != null) { if (file.isFile()) { return context.getContentResolver().openOutputStream( file.getUri()); } else { throw new IOException("directory with same name already exists"); } } else { return context.getContentResolver().openOutputStream( tree.createFile(mime, name).getUri()); } } throw new FileNotFoundException(); }
tree.createFile(mime, name).getUri(), "rw");
/** * 指定したUriが存在する時にその下に出力用ファイルを生成してOutputStreamとして返す * @param context * @param parent * @param dirs * @param mime * @param name * @return * @throws FileNotFoundException */ public static OutputStream getStorageOutputStream(@NonNull final Context context, @NonNull final DocumentFile parent, @Nullable final String dirs, final String mime, final String name) throws IOException { final DocumentFile tree = getStorage(context, parent, dirs); if (tree != null) { final DocumentFile file = tree.findFile(name); if (file != null) { if (file.isFile()) { return context.getContentResolver().openOutputStream( file.getUri()); } else { throw new IOException("directory with same name already exists"); } } else { return context.getContentResolver().openOutputStream( tree.createFile(mime, name).getUri()); } } throw new FileNotFoundException(); }
tree.createFile(mime, name).getUri(), "rw");
tree.createFile(mime, name).getUri(), "rw");
tree.createFile(mime, name).getUri());
tree.createFile(mime, name).getUri());
tree.createFile(mime, name).getUri(), "rw");
private DocumentFile getDocumentFileFor(final String filename, final boolean open) throws RuntimeException { final DocumentFile destinationFolderDocument; String filenameToUse = filename; //We need to check for already existing files only when storing in the default path. //User-defined paths use the new Storage Access Framework that already handles this. //If the file should be opened immediately store it in the standard location to avoid the FileProvider trouble (See ShareNotification::setURI) if (open || !ShareSettingsFragment.isCustomDestinationEnabled(device.getContext())) { final String defaultPath = ShareSettingsFragment.getDefaultDestinationDirectory().getAbsolutePath(); filenameToUse = FilesHelper.findNonExistingNameForNewFile(defaultPath, filenameToUse); destinationFolderDocument = DocumentFile.fromFile(new File(defaultPath)); } else { destinationFolderDocument = ShareSettingsFragment.getDestinationDirectory(device.getContext()); } String displayName = FilesHelper.getFileNameWithoutExt(filenameToUse); String mimeType = FilesHelper.getMimeTypeFromFile(filenameToUse); if ("*/*".equals(mimeType)) { displayName = filenameToUse; } DocumentFile fileDocument = destinationFolderDocument.createFile(mimeType, displayName); if (fileDocument == null) { throw new RuntimeException(device.getContext().getString(R.string.cannot_create_file, filenameToUse)); } return fileDocument; }
if (mime == null) mime = "application/octet-stream"; DocumentFile docFile = dir.createFile(mime, downloadFileName); OutputStream stream = mContext.getContentResolver().openOutputStream( docFile.getUri());