如何获取外部存储的路径?

时间:2015-02-10 08:39:43

标签: android

我正在尝试将文件写入手机。

我使用Environment.getDataDirectory()来了解内部存储的路径,并使用Environment.getExternamStorageDirectory()来了解外部存储的路径。

但是,当我使用Environment.getExternalStorageDirectory()作为路径时,该文件将在内部存储中创建。当我使用Environment.GetDataStorage()作为路径时,不会创建该文件。 (我不确定,但至少在探险家应用程序中找不到它。)

我认为我的手机的内部存储被视为外部存储。(在我的情况下,它有32 GB的存储量)

我想知道可移动存储(例如micro SD card)路径。我该怎么办?

3 个答案:

答案 0 :(得分:8)

来自getExternalStorageDirectory()

的官方文档
  

不要在这里混淆“外部”这个词。这个目录   可以更好地被视为媒体/共享存储。它是一个文件系统   可以容纳相对大量的数据,并且可以共享   所有应用程序(不强制执行权限)。传统上这是   SD卡,但它也可以作为内置存储器实现   与受保护的内部存储区别的设备,可以是   作为文件系统安装在计算机上。

因此,它可能与设备中的内置存储不同。

对于您的情况您可以使用getExternalStoragePublicDirectory(java.lang.String)

  

这是用户通常会放置和管理自己的地方   文件

     

这里的路径应该是DIRECTORY_MUSIC,DIRECTORY_PODCASTS之一,   DIRECTORY_RINGTONES,DIRECTORY_ALARMS,DIRECTORY_NOTIFICATIONS,   DIRECTORY_PICTURES,DIRECTORY_MOVIES,DIRECTORY_DOWNLOADS,或   DIRECTORY_DCIM。不能为空。

或者如果您希望在用户卸载应用时删除您的数据,可以使用getExternalFilesDir()

As这些文件是应用程序的内部文件,通常不会被用户视为媒体。

getFilesDir()getExternalFilesDir()

之间也存在一些差异
  1. 外部文件并非始终可用:如果用户将外部存储装入计算机或将其删除,它们将消失。有关存储状态的信息,请参阅环境中的API。

  2. 这些文件没有强制执行安全措施。例如,任何持有WRITE_EXTERNAL_STORAGE的应用程序都可以写入这些文件。

答案 1 :(得分:0)

您可以尝试使用此代码获取SD卡(外部存储)路径:

String separator = "/";
String sdcardPath = Environment.getExternalStorageDirectory().getPath() + separator;

例如,作为String的SD卡路径将如下所示:

"mnt/sdcard/"

如果仍然无效,请尝试使用getPath()更改getAbsolutePath()

然后,添加以下权限:

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

根据@ ShubhangMalviya的回答,如何获取SD卡目录:

public String getSDCardDirectory(){
    String SdcardPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString();
    String dir = SdcardPath.substring(SdcardPath.lastIndexOf('/') + 1);
    System.out.println(dir);
    String[] trimmed = SdcardPath.split(dir);
    String sdcardPath = trimmed[0];
    System.out.println(sdcardPath);
    return sdcardPath;
}

我建议你使用Environment.DIRECTORY_DCIM,因为大多数人从未将他们的DCIM(照片)路径目录从SD卡移动到内部存储。通常,总是在SD卡中。

答案 2 :(得分:-1)

try this....
static String storagestate = Environment.getExternalStorageState();
    private static FileOutputStream outStream;
    private static File imageFilepath;

    public static String saveImage(Bitmap bitmap) {
        File folder = null;
//check for SD card
        if (storagestate.equals(Environment.MEDIA_MOUNTED)) {
            folder = new File(Environment.getExternalStorageDirectory(),
                    "*YourStorageNameInDevice");
            if (!folder.exists()) {
                folder.mkdir();
            }
            outStream = null;

            String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
                    .format(new Date());
//getting filepath
            imageFilepath = new File(folder.getPath() + File.separator
                    + timestamp + ".PNG");
            try {
                outStream = new FileOutputStream(imageFilepath);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
                outStream.flush();
                outStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return imageFilepath.getAbsolutePath();
    }
}