【问题标题】:Get internal as well as external storage file path获取内部和外部存储文件路径
【发布时间】:2015-12-29 21:40:02
【问题描述】:

在我的应用程序中,我需要读取外部和内部文件路径。换句话说,用户可以根据需要从内部存储中选择文件,如果需要,可以从 sdcard 中选择文件。

我在 SO 中搜索时发现了这个:

使用 getExternalStorageDirectory() 访问外部存储。 使用 getFilesDir() 获取应用的内部存储部分。

但是我怎么知道用户是从外部目录还是内部目录中选择了一个文件?

【问题讨论】:

  • 文件相同的情况下,为什么还要知道文件来自哪里?
  • 我只会在文件位于外部存储时调用 getExternalStorageDirectory(),而仅当文件在内部存储时调用 getFilesDir()。我不知道这是否是正确的方法。请指教。
  • 请记住,getExternalStorageDirectory() 返回的任何内容都不必在实际的 SD 卡上。它可能在内置内存上。这里的“外部”是指“任何应用都可以访问”或“相对于应用的外部”

标签: android android-intent


【解决方案1】:

这是一个从内部存储读取图像的示例方法;

 public Bitmap readFromInternalStorage(String filename){
    try {
        File filePath = this.getFileStreamPath(filename);
        FileInputStream fi = new FileInputStream(filePath);
        return BitmapFactory.decodeStream(fi);
    } catch (Exception ex) { /* handle exception like a king here */}

    return null;
}

现在,您可以从这里查看该值是否为null,如果是,则尝试使用相应的方法从外部存储中读取!

当然,您还可以使用类变量来跟踪图像/文件的来源(内部或外部),并根据调用的方法相应地更新它们!

我希望这可以帮助您解决这个问题!祝你好运。

【讨论】:

  • 也许问题是“用户如何挑选图像?”
  • 有一个添加按钮,当用户点击他手机的文件目录时,它会出现。他可以从那里选择任何 mp3 文件。我需要存储该 mp3 文件的文件路径和其他详细信息,例如名称、标题等,以便在用户需要时将该路径传递给系统的默认音乐播放器。
【解决方案2】:

但是我怎么知道用户是从外部目录还是内部目录中选择了一个文件?

这取决于您的用户界面。您是构建文件浏览 UI 的人,因此您知道您在文件浏览 UI 中使用的根目录。

当然,这些位置很可能不会有任何文件。

getFilesDir() 是 internal storage 的一部分,其中唯一的文件将是您自己放置的文件。

getExternalFilesDir() 是external storage 的一部分。理论上,用户可以使用其他工具(如桌面操作系统)将文件放在此目录中。实际上,用户不太可能这样做,除了您的代码之外,没有其他东西可以将文件放在该目录中。

当然欢迎您编写使用其他外部存储位置的文件浏览 UI,例如 Environment.getExternalStoragePublicDirectory(),这些位置更有可能实际包含文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多