在我的代码中,使用此代码将文件写入文件
//the path
String fileName = Environment.getExternalStoragePublicDirectory(fileName) + File.separator+"Foo"+File.separator;
File dir = new File(fileName);
//the file
fileName += "bar"
File file = new File(fileName);
try {
file.createNewFile();
} catch (IOException e) {
//do nothing, for now
}
return;
这会导致文件被写入/storage/emulated/0/
而不是/storage/sdcard0
。我遇到的问题是,当我将设备连接到我的机器(Ubuntu 13.10)时,我看不到/storage/emulated/0/
。
答案 0 :(得分:0)
当您“将设备连接到[您的]计算机”时,您无法获得设备的根目录。您将可以访问外部存储空间。
此外,getExternalStoragePublicDirectory()
does not take random values as parameters。使用类似Environment.DIRECTORY_DOWNLOADS
的内容。
例如,这是我在插入Nexus 7(2013)时在Ubuntu 13.10上看到的内容:
当我进入“内部存储”时,我看到:
以下是/mnt/shell/emulated/0/
的内容,如DDMS所示:
您会注意到“内部存储”的目录列表与/mnt/shell/emulated/0/
的目录列表相同。那是因为它们是同一个目录。
对于主要用户帐户,Environment.getExternalStorageDirectory()
指向在DDMS中查看时显示为/mnt/shell/emulated/0/
并且通过MTP显示为“内部存储”的位置(尽管后者是Nexus 7的名称 - 它可能因设备而异。)
另请注意,MTP可能无法显示/mnt/shell/emulated/0/
中的所有内容,因为MTP实际上是由MediaStore
驱动的,并且并非所有内容都可能已编入索引。如果您将文件写入外部存储,请使用MediaScannerConnection
和scanFile()
以确保设备的MTP连接结束了解它们。
我为混合的“内部存储”/“外部存储”术语道歉。我刚刚写完a blog post serie试图解释所有这些。