簡體   English   中英

無法在 SD 卡上創建新文件夾來備份多個文件

[英]Can't create new folders on SD card to backup many file

我正在嘗試備份目錄,但我一直無法創建新文件夾。

首先,我向 Manifest 授予權限並且已經請求了運行時權限:

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

注意:我設備上的Environment.getExternalStorageDirectory()返回內部存儲而不是 SdCard。 但是,我使用文件選擇器從 SdCard 中選擇文件並正確讀取其數據。

但是,這是我備份目錄的方法:

private void backupSmaliDir(String smaliDir){
    StringBuilder result = new StringBuilder("");
    String backupDirPath = smaliDir+"-BACKUP";
    StringBuffer listFile = getAllFiles(new File(smaliDir));
    String[] lines = listFile.toString().split("\n");

    result.append(String.format("BACKUP DIR: %s\nHAVE %s file to backup\n", backupDirPath, String.valueOf(lines.length)));
    try {
        for (String path : lines) {
            File f = new File(path.replaceFirst(smaliDir, backupDirPath));
            File newf = f.getParentFile();
            result.append(String.format("\n Old: %s\n New: %s\n", path, newf.getCanonicalPath()+"/"+ new File(path).getName()));

            boolean isCopied = false;
            result.append(String.format("[w] EXISTS: %s | MKDIRS: %s\n", newf.exists(), newf.mkdirs()));
            if  (newf.exists() || newf.mkdirs()) {
                // just copy path (FILE) to newf (FILE)
                File fi = new File(path);
                File fo = new File(newf.getCanonicalPath()+"/"+fi.getName());
                copyFileUsingStream(fi, fo);
                isCopied = true;
            }
            if (isCopied) result.append("\tCopied!\n");
            else result.append("\tCanceled!\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    saveBackupLog(result.toString());
}

我不知道為什么newf.exists() || newf.mkdirs() newf.exists() || newf.mkdirs()總是返回False ,這意味着我在 SdCard 上沒有新目錄。

有一些結果日志:

Smali Directory: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali

BACKUP DIR: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali-BACKUP
HAVE 141 file to backup

 Old: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali/android/support/v9/app/a.smali
 New: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali-BACKUP/android/support/v9/app/a.smali
[w] EXISTS: false | MKDIRS: false
    Canceled!

 Old: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali/android/support/v9/app/aa.smali
 New: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali-BACKUP/android/support/v9/app/aa.smali
[w] EXISTS: false | MKDIRS: false
    Canceled!

 Old: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali/android/support/v9/app/ab.smali
 New: /storage/AF7E-4CF0/toolbox/IPHONE_CONTROL_PSYCHO/smali-BACKUP/android/support/v9/app/ab.smali
[w] EXISTS: false | MKDIRS: false
    Canceled!
.....

注2:如果我在內部存儲中備份一個目錄,如/storage/emulated/0/tool ,此代碼運行良好! 那么什么問題,我該如何解決呢?

將以下內容添加到您的清單中:

<application
    android:requestLegacyExternalStorage="true"
    ...

因為要求Manifest.permission.WRITE_EXTERNAL_STORAGE對 Android 10+ 來說已經不夠了。

暫無
暫無

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

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