【发布时间】:2026-02-07 19:40:01
【问题描述】:
我在 android 中保存文件时遇到问题,FileOutputStream 不断退回到FileNotFoundException,因此不会将文件写入外部存储。
是的,我确实在清单中设置了权限:
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
我已经在函数下面添加了代码,有人可以向我解释发生了什么问题,如果它试图覆盖现有文件,有没有办法替换该文件(名称需要是静态的)?
(也欢迎提供使代码看起来更好的提示)
Bitmap savebitmap = Bitmap.createBitmap(drawView.getDrawingCache());
File mediaStorageDir = new File(Environment.getExternalStorageDirectory()+"/Android/data/"+getApplicationContext().getPackageName()+"/Files");
if (!mediaStorageDir.exists()){
mediaStorageDir.mkdir();
}
File pictureFile = new File(Environment.getExternalStorageDirectory()+"/Android/data/"+getApplicationContext().getPackageName()+"/Files"+File.separator+"Tempsave.png");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
savebitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
}
catch (FileNotFoundException e) {}
catch (IOException e) {}
感谢 Guillaume 和 theV0ID 引导我找到最有效的正确答案。 下面是编辑为工作版本的示例代码。
Bitmap savebitmap = Bitmap.createBitmap(drawView.getDrawingCache());
File pictureFile = new File(Environment.getExternalStorageDirectory()+"/Android/data/"+getApplicationContext().getPackageName()+"/Files"+File.separator+"Tempsave.png");
pictureFile.getParentFile().mkdirs();
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
savebitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
}
catch (FileNotFoundException e) {}
catch (IOException e) {}
【问题讨论】:
-
请创建最小示例来重现问题。
-
@theV0ID 创建一个最小示例是什么意思?减少代码,只保留书写部分?此外,如果尝试加载文件有帮助,则会出现文件/文件夹不存在的错误。
-
我的意思是你应该删除代码中明显与问题无关的部分。
-
@theV0ID 我已按要求删除了与文件输出流无关的所有内容
-
这不是一个最小的例子。您仍然有大量不相关的代码。位图压缩显然是不相关的,你也可以简化你的路径。但是,你检查过
mediaStorageDir.mkdir()的返回值吗?如果必须为真true。如果不是,则实际问题出在之前的某个地方。您是否检查过mediaStorageDir的计算是否正确?您可以在调试器中查看或打印mediaStorageDir.toString()以记录 cat。
标签: java android file bitmap filenotfoundexception