android - 如何在外部 SD 卡而不是设备存储中写入文件?

标签 android file-handling android-file

我试过这个:

  public String getFilename() {
    File file = new File(Environment.getExternalStorageDirectory(), "Test2");
    if (!file.exists()) {
        file.mkdirs();
    }
    String uriSting = (file.getAbsolutePath() + "/" + "IMG_" + System.currentTimeMillis() + ".png");
    return uriSting;
}

我尝试将第二行更改为:

File file = new File("sdcard/Test2");

但目录仍然是在设备存储中创建的,而不是在外部 SD 卡上。

最佳答案

您不能任意访问 removable storage .

在 Android 4.4+ 上,您有两个主要选择:

  1. 使用 getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs()(注意复数),所有方法都在 上下文。如果它们返回 2+ 个位置,则第二个和后续位置是您的应用可以在没有任何权限的情况下读取和写入的可移动存储上的位置。

  2. 使用 ACTION_OPEN_DOCUMENT and ACTION_CREATE_DOCUMENT , 以允许用户选择放置某些内容的位置,用户可以在其中选择可移动存储(或 Google Drive,或 DropBox,或 external storage,或其他任何东西)。你得到一个 Uri,而不是一个文件系统路径; use ContentResolver to work with that Uri to get streams for reading and writing .

关于android - 如何在外部 SD 卡而不是设备存储中写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247666/

相关文章:

android - 如何在android中将字符串转换为时间?

java.lang.NullPointerException : Attempt to invoke virtual method 'android. content.pm.PackageManager

android - 关闭应用程序后显示上次查看的页面

Android:如何将目录中的所有文件列出到数组中?

java - Android 丢失应用程序数据 (/data/data/com.app.app/files)

android - Android 模拟器图像存储在哪里?

java - 未调用 RecyclerView 适配器方法

c - lseek() 尝试使用字节文件,但指针是 FILE 类型

c - 在 C 中一起使用 fscanf 和 fprintf

java - 在 Java 中将数据从 MySql 传输到 NoSql 时使用文件作为中间层