无法从目录中读取文件 - android

Posted

技术标签:

【中文标题】无法从目录中读取文件 - android【英文标题】:Cannot read files from a directory - android 【发布时间】:2011-01-13 11:14:45 【问题描述】:

我在项目中有一个目录 /sdcard/audio。此目录包含一些音频 (wav) 文件。 这是我想要做的: 1. 从目录中读取。 2.播放wav文件。

我写的访问目录的代码如下:

String path_to_media = "/sdcard/audio/";
File dirEffectFiles = new File(path_to_media);   //gets a handle to the directory of effect files.
Log.v(this.toString(), "Getting into path = " + path_to_media);
Log.v(this.toString(), "Some details about the directory: path = " + dirEffectFiles.getPath()
                + " Can read: " + dirEffectFiles.canRead() + " list:" + dirEffectFiles.list()
                + " absolute path:" + dirEffectFiles.getAbsolutePath() + " is absolute:" + dirEffectFiles.isAbsolute()); 

我得到的输出是:

01-13 16:23:34.941: 一些关于 目录:path = /sdcard/audio 可以读取:false list:null absolute path:/sdcard/audio is absolute:true

我有以下问题: 1.如何使上述文件夹可读?通过设置dirEffectFiles.setReadable(true)? 2. 另外请注意上面的path_to_media 是/sdcard/audio/。打印时,最后一个“/”消失。这是一些内部解析的正常影响还是我应该担心?

欢迎任何帮助, 谢谢, 斯里拉姆。

【问题讨论】:

【参考方案1】:

您是否在 androidManifest.xml 中添加了正确的权限?

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

另外,明智的做法是使用环境方法来获取正确的 SD 卡路径:

Environment.getExternalStorageDirectory()

另外,你从中得到什么:

dirEffectFiles.exists()

【讨论】:

我在清单中添加了权限行。当我从 getExternalStorageDirectory() 打印详细信息时,我得到 /mnt/sdcard 作为外部存储目录。此外,exists() 函数返回 false。我想我可能必须更改 path_to_media。让我回复你。 似乎将 path_to_media 更改为 /mnt/sdcard/audio 不起作用。但是 /mnt/sdcard 是指项目目录中的文件夹 /sdcard 还是指用 mksdcard 制作的 sdcard 的图像? 应该指sd卡的挂载位置;如果您插入了 SD 卡。音频目录是否已经存在于 SD 卡上?都是小写的(我不确定它是否没有大小写)? 我没有插入 SD 卡。我在项目目录中创建了一个名为 sdcard 的文件夹和一个名为 audio/ 的子文件夹。我把我的 wav 文件放在 audio/.每个目录名称都是小写的。我的 API 是 2.3 级别 9。参考我之前的评论,在从 /mnt/sdcard 返回的文件描述符上使用 exists() 也会返回 false。 Android 上的存储非常受管理(请参阅developer.android.com/guide/topics/data/data-storage.html)。基本上你可以使用外部(SD卡)或内部(每个应用程序的私人区域)。要到达内部区域,您必须使用 Context.getFilesDir()(请参阅 developer.android.com/guide/topics/data/…)【参考方案2】: 上面提到的

/sdcard/audio 是项目目录下的一个目录。这种方法是错误的。必须使用 adb 创建模拟 sdcard 的目录(在命令提示符(Windows)中),如下所示:

    adb shell mkdir /sdcard/audio - 这将在 sdcard/ 中创建 audio/ 子目录 adb push "complete path of file name to be pushed" /sdcard/audio/file-name 对其他波形文件重复此过程。

就是这样。您应该能够从挂载的 /sdcard 目录中读取文件。 @thoredge:感谢您的帮助。

【讨论】:

以上是关于无法从目录中读取文件 - android的主要内容,如果未能解决你的问题,请参考以下文章

无法从镶木地板中读取零件文件

从 Android 上的资产中读取音频文件

android读取一个文件夹有多少个文件

android如何读取sd卡目录文件夹下多个文件,自定义一个case文件夹,如何读取里面的多个文件

Android读取assets目录下的视屏资源

如何在 Android 10、Target API 29 中从设备的共享存储(根目录)读取现有文件? [复制]