簡體   English   中英

如何在Android中將文件存儲到指定的外部目錄

[英]How to store files to a Specified External Directory in Android

我試圖將一些文件從我的資產文件夾(並創建一些新文件)復制到外部文件夾。

我知道我需要以下權限 -

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

然后,我應該檢查外部存儲狀態如下(從 android 的官方示例中使用的代碼示例)-

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

然后,我可以使用getExternalFilesDir()作為 -

String finalOutputFilePath = context.getExternalFilesDir(null) + "/" + databaseName;

它會將文件保存到某個地方 - Android/data/myPackageName/files/

但是,我希望將文件存儲在特定文件夾中,例如 -

  • 創建一個名為“MyTestDirectory”的文件夾,如果外部存儲的基礎上尚不存在(我不是在寫 sdcard/MyTestDirectory,因為我讀到外部存儲命名法可能因設備而異)和
  • 僅在該特定文件夾中存儲/復制文件

所以,我的問題是如何選擇(創建和使用)指定的文件夾?

PS - 我想,這個問題可能已經在 SO 上得到了回答,但我找不到它。

要創建文件夾,請使用 createFolder 方法。

private void createFolder(String folderName){
        File file=new File(Environment.getExternalStorageDirectory() + File.separator +folderName);
        if(!file.exists())
             file.mkdirs();
    } 


   private void CopyAssets(String folderName) {
            AssetManager assetManager = getAssets();
            String[] files = null;
            try {
                files = assetManager.list("Files");
            } catch (IOException e) {
                Log.e("tag", e.getMessage());
            }

            for(String filename : files) {
                System.out.println("File name => "+filename);
                InputStream in = null;
                OutputStream out = null;
                try {
                  in = assetManager.open("Files/"+filename);   // if files resides inside the "Files" directory itself
                  out = new FileOutputStream(Environment.getExternalStorageDirectory().toString()+File.separator +folderName +"/" + filename);
                  copyFile(in, out);
                  in.close();
                  in = null;
                  out.flush();
                  out.close();
                  out = null;
                } catch(Exception e) {
                    Log.e("tag", e.getMessage());
                }
            }
        }
        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);
            }
        }

暫無
暫無

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

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