我想获得一个公共存储我的Android设备的路径。我有两个申请。一个是写一些日志文件,另一个是用来读取它们(因此我不能使用应用程序私有存储)。我想知道是否有一种方法,它会给我设备的“公共空间”路径,我可以轻松地创建和读取文件。
这个解决方案不是我想要的:
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
也不是:
How to get the internal and external sdcard path in android
我的问题有一个简单的解决方案吗? 外部公共存储是我要找的吗?
http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
问题是当我在我的设备上运行应用程序时一切正常,但是当我在没有存储卡的设备上运行它时,它无法正常工作。所以我想使用外部公共存储,这不是存储卡......
我的代码不起作用(它不保存文件)。当我选择直接在Environment.getExternalStorageDirectory()。getAbsolutePath()中的目录时,它工作......我做错了什么? :
transient private final String DIRECTORY = "/Android/data/com.aaa.bbb.ccc/files/";
public void writeLog()
{
Calendar calendar = setDate();
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + DIRECTORY);
if(!dir.exists())
dir.mkdir();
File file = new File (dir, "log_" + calendar.get(Calendar.YEAR) + "_"
+ ((calendar.get(Calendar.MONTH))+1) + "_"
+ calendar.get(Calendar.DAY_OF_MONTH)
+ ".dta");
...
}
更新:
为什么此代码有效:
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Dir1/");
if(!dir.exists())
dir.mkdir();
这不是
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Dir1/Dir2/Dir3/");
if(!dir.exists())
dir.mkdir();
答案 0 :(得分:1)
尝试查看android.os.Environment
here.
以下方法看起来很有趣..
public static File getDataDirectory ();
//Gets the Android data directory.
public static File getDownloadCacheDirectory ();
//Gets the Android download/cache content directory.
修改强> * 解决方案: *
你犯的一个小错误就是
替换这个:
if(!dir.exists())
dir.mkdir();
使用:
if(!dir.exists())
dir.mkdirs(); // will create all the parent directories as well..
希望我现在帮助你了
与
答案 1 :(得分:1)
在某些设备中,外部SD卡默认名称显示为extSdCard
,而其他设备显示为sdcard1
。此代码段有助于找出确切的路径,并有助于检索外部设备的路径。
String sdpath, sd1path, usbdiskpath, sd0path;
if (new File("/storage/extSdCard/").exists()) {
sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path", sdpath);
}
if (new File("/storage/sdcard1/").exists()) {
sd1path="/storage/sdcard1/";
Log.i("Sd Card1 Path", sd1path);
}
if (new File("/storage/usbcard1/").exists()) {
usbdiskpath="/storage/usbcard1/";
Log.i("USB Path", usbdiskpath);
}
if (new File("/storage/sdcard0/").exists()) {
sd0path="/storage/sdcard0/";
Log.i("Sd Card0 Path", sd0path);
}