Java.io.FileNotFoundException打开失败:ENOENT(没有这样的文件或目录)

7

我有一个临时文件,用于从裁剪库创建图像。我可以在设备文件浏览器中看到该文件,但是当我尝试打开该文件时,出现以下错误:

java.io.FileNotFoundException: file:/data/user/0/com.example.demo/cache/.tmp/cropped1651879842159823361.png: open failed: ENOENT (No such file or directory)

以下是创建该文件的方式:

val croppedImageFile = File.createTempFile("cropped", ".png", viewModel.tempPath)
val destinationUri = Uri.fromFile(croppedImageFile)

viewModel.tempPath 只是以下内容:

viewModel.tempPath = "${this.cacheDir}/.tmp"

我可以看到文件已创建并且有效,但当我尝试访问它时,它声称不存在。我只是通过在视图模型中执行File(uri.toString())打开文件。

我不确定出了什么问题或者为什么无法找到该文件。如果这有关系的话,我正在使用具有 Google Play 并且是 Android 11 的模拟器。


发布实际打开代码。 - Gabe Sechan
我已经做了,就是File(uri.toString())。 - Eman
尝试在 AndroidManifest.xml 应用程序标签中添加 android:requestLegacyExternalStorage="true" - Abu bakar
1
我尝试过了,仍然得到相同的错误。 - Eman
1
@Eman 创建一个文件对象并不会导致FileNotFoundException,因为它并没有打开文件,只是创建了一个对它的引用。创建一个指向不存在路径的File是完全合法的。你可能会将它传递到其他地方,实际上打开了它。 - Gabe Sechan
抱歉,我在使用API调用时是通过file.readBytes()打开它的。 - Eman
1个回答

2
您需要使用new File(uri.getPath())打开文件。 uri.toString()会将URI作为字符串返回,这意味着"file://path/to/file"不是有效的路径。

看起来就是这样了,非常感谢。 - Eman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接