Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问创建的内部目录_Java_Android - Fatal编程技术网

Java 无法访问创建的内部目录

Java 无法访问创建的内部目录,java,android,Java,Android,当我尝试在storage/emulator/0/目录中创建一个目录时,它将不可见且不可访问。我使用mkdir()创建,当我检查它的存在时,dir.exists()返回true,即使我无法访问它 我的设备在API 23中运行,因此我在运行时获得权限,如下所示: boolean hasPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)

当我尝试在storage/emulator/0/目录中创建一个目录时,它将不可见且不可访问。我使用
mkdir()
创建,当我检查它的存在时,
dir.exists()
返回true,即使我无法访问它

我的设备在API 23中运行,因此我在运行时获得权限,如下所示:

 boolean hasPermission = (ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
    if (!hasPermission) {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                REQUEST_READ_STORAGE);
    }
我还创建了
onRequestPermissionsResult
函数:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode)
    {
        case REQUEST_READ_STORAGE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                //reload my activity with permission granted or use the features what required the permission
            } else
            {
                Toast.makeText(this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
            }
        }
    }
}
在这个函数中,我尝试访问我的目录

 public void makeOutSide(String song, InputStream ins){

    // Create the directory

    File dir = new File(Environment.getExternalStorageDirectory(),"appMemes");
    // If it does not exists, make it.
    if (!dir.exists()) {
        dir.mkdirs(); // Generating the directory
    }
    try {
        // Open the resource
        byte[] buffer = new byte[ins.available()];
        ins.read(buffer);
        ins.close();
        // Burn
        String filename = Environment.getExternalStorageDirectory()
                + "/appMemes/"+song+".mp3";
        FileOutputStream fos = new FileOutputStream(filename);
        fos.write(buffer);
        fos.close();
    } catch (Exception e) {
        System.out.println(e);

    }
}
My
AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.renan.appmemes">

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


<application


...
</application>


首先将EnableRuntimePermission函数放入Oncreate中

private void EnableRuntimePermission() {
        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
               != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale
                    (MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

                Toast.makeText(MainActivity.this, "Allow permissions", Toast.LENGTH_LONG).show();
            } else {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    requestPermissions(
                            new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestPermissionCode);
                }
            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {

            case RequestPermissionCode:

                if (grantResults.length > 0) {

                    boolean writeExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED;

                    if (writeExternalFile) {
                    } else {
                        Toast.makeText(MainActivity.this, "Allow permissions to Edit the Image", Toast.LENGTH_LONG).show();
                    }

                }
                break;
        }
    }
然后使用这一行创建direcory

 File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DSLR CAMERASagar/");
        dir.mkdirs();

您是如何尝试访问它的?我更新了我的问题,man
dir.mkdirs()。它可能会失败。确实如此,不是吗!?它应该是:
if(!dir.mkdirs()){Toast(…);return;}
String filename=Environment.getExternalStorageDirectory()+“/appMemes/”+song+“.mp3”;FileOutputStream fos=新的FileOutputStream(文件名)。再次构造该路径的编码非常糟糕。现在代码中有两个“/appMemes”。无益。替换为
File File=new文件(dir,song+“.mp3”);FileOutputStream fos=新的FileOutputStream(文件)存储/emulator/0/目录中的
目录,它将不可见且不可访问。你是说
/storage/emulator/0/
!?你说隐形是什么意思?为谁?哪里你说的不可接近是什么意思?是谁干的?哪里怎么了?你好!我完全按照你说的去做,但同样的错误依然存在。这里我粘贴了我的函数onCreate()和我尝试创建并访问目录的函数:没有出现错误消息,但是当我尝试访问保存在我创建的目录文件夹中的文件时,它不在那里。我也看不到我创建的目录,即使验证表明它是…我认为您需要WRITE_EXTERNAL_STORAGE permission将我的EnableRuntimePermission函数放在Oncreate方法中