我正在使用存储访问网络来选择文件并将其保存在内部存储中,以便将来可以使用该应用。
我正在获取URI,没有任何问题。就像content://com.android.providers.media.documents/document/image%3A141274
当我尝试将图像保存到内部目录时出现问题。代码通过时没有崩溃,相同大小的图像被保存到内部目录中(我可以在设备资源管理器https://take.ms/3TwBS中看到它)。 但是图像本身已损坏,无法打开。
这是我正在使用的代码(获取URI之后)
val destinationFile = File("${context.filesDir.absolutePath}/$fileName")
try {
val writer = FileWriter(destinationFile)
writer.append(readTextFromUri(it))
writer.flush()
writer.close()
} catch (e: Exception) {
e.printStackTrace()
}
@Throws(IOException::class)
private fun readTextFromUri(uri: Uri): String {
val inputStream = activity!!.contentResolver.openInputStream(uri)
val reader = BufferedReader(InputStreamReader(inputStream))
val stringBuilder = StringBuilder()
var line: String? = null
while ({ line = reader.readLine(); line }() != null) {
stringBuilder.append(line)
}
inputStream?.close()
reader.close()
return stringBuilder.toString()
}
答案 0 :(得分:0)
正如@CommonsWare所述,我应该正确处理文件而不是文本。
正确的方法:
ffmpeg -i videoplayback.mp4 videoplayback.mp4 -filter_complex
"[0:v]trim=end=1,setpts=PTS-STARTPTS,fade=t=in:d=1[intro];
[0:v]trim=start=1:end=123.39,setpts=PTS-STARTPTS[main];
[0:v]trim=start=123.39,setpts=PTS-STARTPTS,fade=t=out:d=1[end];
[1:v]trim=end=1,setpts=PTS-STARTPTS,fade=t=in:d=1[intro1];
[1:v]trim=start=1:end=123.39,setpts=PTS-STARTPTS[main1];
[1:v]trim=start=123.39,setpts=PTS-STARTPTS,fade=t=out:d=1[end1];
[0:a][1:a][a];
[intro][main][end][intro1][main1][end1]concat=n=6:v=1:a=1,scale=480x360,setsar=16/9[v]" -map "[v]" -map "[a]" -c:a copy output.mp4
或更长的方式(没有扩展功能)
private fun inputStreamToFile(uri: Uri){
val inputStream = contentResolver.openInputStream(uri)
val output = FileOutputStream(File("${filesDir.absoluteFile}/magic.png"))
inputStream?.copyTo(output, 4 * 1024)
}