Android 从外部存储器读取FileOutputStream但在内部存储器中读取时权限被拒绝
从外部存储移动文件时,外部存储路径的FileOutputStream上出现“权限被拒绝”错误,但它在内部存储路径上工作 我已经试过了,我的读写许可被授予了Android 从外部存储器读取FileOutputStream但在内部存储器中读取时权限被拒绝,android,fileinputstream,fileoutputstream,android-file,android-external-storage,Android,Fileinputstream,Fileoutputstream,Android File,Android External Storage,从外部存储移动文件时,外部存储路径的FileOutputStream上出现“权限被拒绝”错误,但它在内部存储路径上工作 我已经试过了,我的读写许可被授予了 File yourFile = new File(outputPath+"/"+file.getName()); if(!yourFile.exists()) { yourFile.createNewFile(); } FileOutputStream oFile = new FileOutputStream(yourFile, false)
File yourFile = new File(outputPath+"/"+file.getName());
if(!yourFile.exists()) { yourFile.createNewFile(); }
FileOutputStream oFile = new FileOutputStream(yourFile, false);
这是我的代码:Path也是一个用于内部和外部的字符串。
字符串OutputInternal=“/storage/simulated/0/test1/testing”
字符串OutputExternal=“/storage/1A7D-0850/test1/testing”
当路径来自内部存储时,它可以工作,但当我选择外部路径时,它会在fileOutputStream上显示错误(权限被拒绝)也许您没有请求运行时权限。也许您使用的是Android 10+,在这种情况下,您没有文件系统级的外部存储访问权限。实际上,我认为他们混淆了外部存储和可移动存储。检查
OutputInternal
和OutputInternal
值。我使用的是Android minSdk 21和target Sdk 28,并在运行时授予读/写外部存储的权限。是的,外部存储具有可移动存储路径,而output internal具有来自两个路径读取文件的内部存储路径,但当我将文件从外部存储FileOutputStream exception移到permission denied时。您访问文件的方式已经过时,请查看
private void moveFile(File file, String outputPath) {
if (file != null && !outputPath.equalsIgnoreCase("")) {
InputStream in = null;
OutputStream out = null;
try {
//create output directory if it doesn't exist
File dir = new File(outputPath);
if (!dir.exists()) {
dir.mkdirs();
}
in = new FileInputStream(file);
out = new FileOutputStream(outputPath+"/"+file.getName());
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
// write the output file
out.flush();
out.close();
out = null;
file.delete();
} catch (FileNotFoundException fnfe1) {
} catch (Exception e) {
}
}
}