簡體   English   中英

如何在 Android 10 的外部存儲(SD 卡)中創建文件?

[英]How can i create file at external storage(sdcard) in Android 10?

我嘗試制作“文件控制”應用程序。

我找到了如何讀取文件,但我找不到如何寫入文件。

我這樣設置權限。

AndroidManifast.xml

    <application
    ...
    android:requestLegacyExternalStorage="true"
    ...
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我在 MainActivity.onCreate 中調用此代碼。

    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };


    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }


    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);
    verifyStoragePermissions(this);

我想要讀取和寫入文件,位於/storage/3066-3133/title.txt /storage/3066-3133是我的 SD 卡路徑。

讀取文件工作正常。

    public void readFile() {

        String fileTitle = "title.txt";
        File file = new File("/storage/3066-3133", fileTitle);

        try {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String result = "";
            String line;
            while ((line = reader.readLine()) != null) {
                result += line;
            }
            popupToast("read : " + result);

            reader.close();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
            popupToast("no file found");

        } catch (IOException e2) {
            e2.printStackTrace();
            popupToast("read fail");
        }

    }

但是寫代碼出現異常。 write Exception: /storage/3066-3133/title.txt: open failed: EACCES (Permission denied)

    public void writeFile() {
        String fileTitle = "title.txt";
        File file = new File("/storage/3066-3133", fileTitle);

        try {
            if (!file.exists()) {
                file.createNewFile(); // error!!!!
            }
            FileWriter writer = new FileWriter(file, false);
            String str = "      write text     ";
            writer.write(str);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
            popupToast("write fail");
        }
    }

另外,我可以在/storage/emulated/0/title.txt寫入文件。 /storage/emulated/0是內置的外部存儲路徑。

我需要更多的 sdcard 權限?

或者這是問題? 首先,我為目標 sdk:31 創建項目。 我在 build.gradle 中更改了 29。 更改目標 sdk 不起作用? 有人告訴 sdk 30 變化不大。 但是,如果這是問題,我不明白為什么“閱讀”工作......

利用

在清單中使用許可 android:name="android.permission.MANAGE_EXTERNAL_STORAGE" 以及

android:requestLegacyExternalStorage="true" 在您的<應用程序/>

暫無
暫無

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

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