簡體   English   中英

無法在外部存儲中創建文件

[英]Cannot create file in external storage

我正在嘗試在Nougat模擬器的外部存儲目錄中創建文件。 使用以下代碼:

    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test987689");
    if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
        Toast.makeText(this, "External SD card not mounted", Toast.LENGTH_LONG).show();
    }try {
        if (file.getParentFile().exists() || file.getParentFile().mkdirs()) {
            file.createNewFile();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

許可證:

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

我收到以下錯誤:

W/System.err: java.io.IOException: Permission denied
W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
W/System.err:     at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:280)
W/System.err:     at java.io.File.createNewFile(File.java:958)
W/System.err:     at com.vibhinna.sreni.SplashActivity.onCreate(SplashActivity.java:41)
W/System.err:     at android.app.Activity.performCreate(Activity.java:6658)
W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2584)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2692)
W/System.err:     at android.app.ActivityThread.-wrap12(ActivityThread.java)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1445)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:154)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6044)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

我究竟做錯了什么?

如果您的targetSdk為23或更高,則應動態請求權限。

了解更多: 在運行時請求權限

要獲取文件路徑,可以使用Context.getExternalFilesDir()/ Context.getExternalCacheDir()

例如

String path=Context.getExternalCacheDir()+"file.text"; File file=new File(path)

如果文件路徑為“ Android /數據/應用包/文件名”,則不需要權限

暫無
暫無

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

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