簡體   English   中英

無法在內部存儲中創建文件夾

[英]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);
        }
    }

我試過了,我能夠將我的“資產”文件夾中的文件移動到與“文件”目錄相同的級別,那么為什么我不應該有權在同一位置創建一個文件夾?

在您第一次運行您的應用程序時,在您調用此方法getExternalFilesDir(null)兩次之前,不會創建位於Android/data/<package.name>/files的應用程序外部存儲目錄。

所以試試這個代碼..

//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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM