无法在内部存储中创建文件夹

Can't create folder in internal storage

好的,我正在尝试在我的内部存储中创建一个文件夹。 我看过一些教程,但它根本不起作用。

        
private void createDir() {
String folderName;


        folderName = "myFolder";
        File file =  new File(Environment.getExternalStorageDirectory(), folderName);
        if(!file.exists()){
            file.mkdir();
            Toast.makeText(getContext(),"Successful", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getContext(),"Folder already exist", Toast.LENGTH_SHORT).show();
        }
}

这是我创建新目录的方法。 当我启动它时,我总是收到“成功”的吐司。 但该目录从未创建。

权限代码下方。

                    if(!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.SEND_SMS)){
                        String[] permissions = {Manifest.permission.WRITE_CALL_LOG,Manifest.permission.SEND_SMS,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_SMS};
                        ActivityCompat.requestPermissions(getActivity(),permissions,1);
                    }else{
                        lay_dataset1=view.findViewById(R.id.lay_dataset1); 
                        messagePerm();
                    }

这是我的清单:

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

谁能解释一下发生了什么:)

编辑:

 private void copyAssets() {
        AssetManager assetManager = getContext().getAssets();

        String[] files = null;
        try {
            files = assetManager.list("");
        } catch (IOException e) {
            Log.e("tag", "Failed to get asset file list.", e);
        }
        for(String filename : files) {
            InputStream in = null;
            OutputStream out = null;
            try {
                in = assetManager.open(filename);
                File outFile = new File(getContext().getExternalFilesDir(null).getParent().replace("files","myfolder"), filename);
                out = new FileOutputStream(outFile);
                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
            } catch(IOException e) {
                Log.e("tag", "Failed to copy asset file: " + filename, e);
            }
        }
    }

    private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);
        }
    }

我试过了,我能够将我的“资产”文件夹中的文件移动到与“文件”目录相同的级别,所以为什么我不应该有权在同一位置创建一个文件夹?

你第一次运行你的应用,app的外部存储目录 at Android/data/<package.name>/files 不会创建,直到您调用此方法 getExternalFilesDir(null) Twice.

所以试试这个代码..

//Essential for creating the external storage directory for the first launch
getExternalFilesDir(null); 

/*
 output->> /storage/emulated/0/Android/data/<package.name>/files 
*/
Log.i("HINT",getExternalFilesDir("").getAbsolutePath());


//Or create your custom folder
File outFile = new File(getExternalFilesDir(null).getParent(),"myfolder");
//make it as it is not exists
outFile.mkdirs();

/*
 output->> /storage/emulated/0/Android/data/<package.name>/myfolder
*/
Log.i("HINT",outFile.getAbsolutePath());