У меня есть утилита командной строки, которая создает файл в каталоге файлов приложения. Я вижу, что файл есть, но openFileInput все еще не может его найти.
Имя файла не очень длинное и не содержит пробелов или специальных символов. Это файл mp4.
Этот код создает файл:
val byteArray = ByteArray(1024)
try {
val processBuilder = ProcessBuilder().command(
filesDir.absolutePath + File.separator + "start.sh",
"args")
).redirectErrorStream(true)
val process = processBuilder.start()
val inputStream = process.getInputStream()
while (inputStream.read(byteArray) !== -1) {
println("Debug: " + String(byteArray))
}
inputStream.close()
process.waitFor()
} catch (ex: IOException) {
ex.printStackTrace()
}
И это строка, в которой происходит сбой:
var copyToSd = this.openFileInput("myfile.mp4").readBytes()
Что ж, это было невероятно...
Инструмент командной строки, который я использую, принимает имена файлов через переменные командной строки. Ошибка, которую я сделал, заключалась в том, чтобы дать такие аргументы:
filesDir.absolutePath + File.separator + "start.sh",
"arg filenameparameter")
вместо этого:
filesDir.absolutePath + File.separator + "start.sh",
"arg",
"filenameparameter")
Это сработало, но создало дополнительный пробел в начале файла! Файл был там, но его нельзя было найти из-за лишнего места.
Удивительно