Android 从外部存储器读取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)

从外部存储移动文件时,外部存储路径的FileOutputStream上出现“权限被拒绝”错误,但它在内部存储路径上工作

我已经试过了,我的读写许可被授予了

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) {

            }
        }
    }