Environment.getExternalStorageDirectory()不起作用

时间:2014-02-16 22:05:41

标签: java android

我正在尝试在手机的外部存储设备(SD卡)中创建一个文件。

File F = new File(Environment.getExternalStorageDirectory() + File.separator + "MyBrand" + File.separator + "MyApp" + File.separator + "MyFile.srl");

但这是在内部存储区域创建的。我检查了Windows资源管理器。在调试时,F的路径是“/mtn/sdcard/MyBrand/MyApp/MyFile.srl”,这是错误的,因为在Windows资源管理器中,SD卡的名称实际上是“SD卡”(带空格) 。我还在getExternalStorageDirectory()`的末尾尝试了.getAbsolutePath,但它做了完全相同的事情。

我创建此文件的代码:

if (F.exists() == false)
{
  try
  {
    F.getParentFile().getParentFile().mkdir();
    F.getParentFile().mkdir();
    F.createNewFile();
  }
  catch (IOException e)
  {
    e.printStackTrace();
  }

  scr_save();
}
else
  scr_load();

它使mkdirs()和createNewFile()很好,但scr_save和scr_load总是抛出异常,FileNotFound或IOException。

编辑: 我还在没有插入电脑时测试它,只是为了确保没有干扰。为了安全起见,我总是在拔掉它之前删除路径和文件。它似乎创建了目录和文件,但后来没有正确读取它(可能没有正确序列化?我使用此文件来存储序列化对象)。

编辑: 最初有一个错误。我将路径+文件名作为单个参数放入F.现在我将路径和文件名作为2个单独的字符串传递。但是,我仍然遇到同样的问题:(

我在清单中有正确的权限(.WRITE_EXTERNAL_STORAGE)

我使用Windows 7 64位,以及64位版本的Eclipse。我的手机是LG-MS770。

无论如何请帮助。不知道为什么getExternalSorage不起作用。

3 个答案:

答案 0 :(得分:1)

  

我正在尝试在手机的外部存储设备(SD卡)中创建一个文件

自2011年初以来制造的大多数设备上,Android SDK所称的“外部存储”不是SD卡。

  

不知道为什么getExternalSorage无效。

工作得很好as documented。它完全没有达到你的期望。

在Android 4.4之前,没有任何记录和支持的方式来访问任何类型的可移动存储。在Android 4.4上,您现在拥有getExternalFilesDirs()getExternalCacheDirs()(请注意复数形式),如果存在此类存储,则可以访问可移动存储上的特定目录。

答案 1 :(得分:0)

首先,/mnt/sdcard/MyBrand/MyApp/MyFile.srl是正确的:SD Card可以是Windows资源管理器分配的标签。
无论如何,看看它所说的getExternalStorageDirectory documentation

  

如果用户已安装此目录,则该目录当前可能无法访问   他们的计算机已从设备中删除,或者发生了其他一些问题。您   可以使用getExternalStorageState()确定其当前状态。

可能,SD Cardmounted 时进行调试,这是错误的。
然后,mkdir如果失败则不会抛出exception; createNewFile应该这样做,但是当你读到像“或其他一些问题已经发生的事情”时,你应该为头痛做好准备。

答案 2 :(得分:0)

getExternalStorage非常令人困惑。它不代表您插入手机的SD卡,而是代表插入手机时计算机上显示的内容。

这是您可以浏览的存储空间,可以在手机上放置一些图像,音乐等,也可以通过手机获取。