【问题标题】:Writing to the SD card写入 SD 卡
【发布时间】:2018-04-07 05:33:29
【问题描述】:

我想写入 Android 手机中的物理 SD 卡。

这是我的代码:

    File sdCard = Environment.getExternalStorageDirectory();
    String state = Environment.getExternalStorageState(); //shows mounted
    boolean removable = Environment.isExternalStorageRemovable(); //shows false

我知道getExternalStorageDirectory()中的external不一定是SD卡。当我将文件写入 sdCard 对象时,它最终会在内部(意味着内置)存储中,而不是在 sdCard 上。

在我的手机上,我有多个将数据写入 sdCard 的应用程序,例如文件管理器。他们是怎么做到的呢?无论制造商认为是内部/外部什么,我都想强制写入 sdCard。

【问题讨论】:

  • 直接在sdcard中写入文件是否成功..?

标签: android android-sdcard


【解决方案1】:
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");
dir.mkdirs();
File file = new File(dir, "filename");

FileOutputStream f = new FileOutputStream(file);
...

【讨论】:

  • 这正是我所做的,问题是为什么我的文件最终会出现在通常被认为是内部存储而不是 micro SD 卡上。
  • @AndyAndroid 因为Environment.getExternalStorageDirectory() 不再像以前那样工作了。使用较新的 Android 版本,它现在为您提供外部存储的路径,这是您手机附带的内置(不可移动!)存储。访问实际(可移动)SD 卡现在有点复杂,除非您需要写入特定文件夹,否则这里有一些关于 SO 的问题可以解决如何做到这一点。
【解决方案2】:

注意:外部存储上的文件并不总是可以访问,因为用户可以将外部存储安装到计算机上用作存储设备。因此,如果您需要存储对应用功能至关重要的文件,则应将它们存储在内部存储中。


请求外部存储权限

要写入公共外部存储,您必须在清单文件中请求WRITE_EXTERNAL_STORAGE 权限:

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

注意:如果您的应用使用WRITE_EXTERNAL_STORAGE 权限,那么它也隐含地拥有读取外部存储的权限。

如果您的应用只需要读取外部存储(而不是写入),那么您需要声明READ_EXTERNAL_STORAGE 权限:

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

https://developer.android.com/training/data-storage/files.html


现在,假设您想在 SD 中录制一个文本文件...

// get the path to sdcard
File sdcard = Environment.getExternalStorageDirectory();
// to this path add a new directory path
File dir = new File(sdcard.getAbsolutePath() + "/your-dir-name/");
// create this directory if not already created
dir.mkdir();
// create the file in which we will write the contents
File file = new File(dir, "My-File-Name.txt");
FileOutputStream os = outStream = new FileOutputStream(file);
String data = "This is the content of my file";
os.write(data.getBytes());
os.close();

【讨论】:

  • 这正是我所做的,问题是为什么我的文件最终会出现在通常被认为是内部存储而不是 micro SD 卡上。
猜你喜欢
  • 2011-04-20
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
相关资源
最近更新 更多