android - Android中如何将文件存储到指定的外部目录

标签 android android-external-storage

我正在尝试将一些文件从我的 Assets 文件夹(并创建一些新文件)复制到外部文件夹。

我知道我需要以下权限 -

<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,当我读到外部存储命名法时 可能因设备而异)和
  • 仅在该特定文件夹中存储/复制文件

那么,我的问题是如何选择(创建和使用)指定的文件夹?

附言- 我想,这个问题可能已经在 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);
            }
        }

关于android - Android中如何将文件存储到指定的外部目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36892551/

相关文章:

java - 调用 C 函数时,Toast 不显示

Android Fragment Transaction 自定义动画

java - 如何将 Firebase 检索到的值与字符串进行比较?

java - 安卓/Java : displaying images from assets and/or internal/sd storage

java - 在 Android 上写入外部 SD 卡的通用方法

android - API 28(Android Pie) 上支持 Android StrongBox 的 Android 智能手机列表

android - 如何从 Android 应用程序中删除解析用户?

android - 这个方法的作用 isExternalStorageRemovable 和 isExternalStorageEmulated

Android 删除 SQL 数据库

android - 检查是否为另一个应用程序授予了外部存储管理器