2013-05-30 64 views
2

我想获得一个公共存储我的android设备的路径。我有两个应用程序。一个是写一些日志文件,另一个用于读取它们(因为这个原因,我不能使用应用程序私有存储)。我想知道是否有方法,这将给我的设备“公共空间”的路径,我可以轻松地创建和读取文件。如何获得公共存储路径?外部存储(不是SD卡)

该解决方案是不是我要找:

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"); 

...

} 

UPDATE:

为什么此代码的工作:

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(); 

回答

1

尝试寻找在android.os.Environmenthere.

按照方法看起来有趣..

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.. 

希望我现在 帮你

+0

为什么这种方法并不好:getExternalStorageDirectory()getAbsolutePath为什么我的代码是不工作...它应该工作在你的代码 – Marek

+0

,问题是,在没有SD卡。所以我建议你想办法在手机内存上写文件。如果SD卡不存在,你如何写入它? – aditya

+0

我使用的代码是写在SD卡(我有Galaxy S3)可见的手机内存中。问题是不同的。当我现在使用DIRECTORY时,它不起作用。但是,当我把DIRECTORY只放在一个目录中,如DIRECTORY =“/ SomeDir /”,它完美的工作......为什么? – Marek

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); 
} 
相关问题