我的RAW目录中有一个文件夹,里面装满了图像和视频。我想在Kotlin中将此文件夹转换为文件对象,然后遍历其中的所有文件夹和文件,并将其转换为可用于我的应用的媒体。
包含我的媒体的目录(我想将其转换为文件对象,这是我遇到的问题):
val basePath = Paths.get("").toAbsolutePath().toString()
traverse(db, File("$basePath/app/src/main/res/raw/media1")) // This is a directory, and it's not being seen using this code.
traverse()方法遍历media 1目录,并将找到的所有图像/视频转换为应用可用的媒体。
fun traverse(db: SQLiteDatabase?, dir : File) {
if (dir.exists()) {
val files = dir.listFiles()
if (files != null) {
for (i in 0 until files.count()) {
val file = files[i]
if (file.isDirectory) {
traverse(db, file)
} else {
saveFile(db, file) // This fun creates a database row for the media and saves the media file onto the local phone for later reference
}
}
}
}
}
我试着通过C盘访问目录,通过Paths.get命令,调用R. raw。无论如何,它似乎看不到“media 1”目录...
2条答案
按热度按时间c3frrgcw1#
我想在Kotlin中将此文件夹转换为文件对象,然后遍历其中的所有文件夹和文件,并将其转换为可用于我的应用的媒体。
抱歉,这不是一个选项。将这组目录移动到
assets/
而不是raw/
中会更好,然后使用AssetManager
遍历树。然而,即使这样,您也不会得到文件,而是InputStreams
,因为资产和资源都不是手机文件系统上的文件。无论如何,似乎都看不到“media1”目录
部分原因是因为它们不是手机上的文件,部分原因是资源不支持子目录。
liwlm1x92#
这就是我的解决方案:
将各个媒体文件从其子目录移动到项目的原始资源文件夹中。
Android studio不允许遍历子目录,并且必须使用输入和输出流手动将资源加载到File对象中。我觉得很可笑,我们必须跳过这么多圈才能完成这么基本的事情。