如何用FileOutputStream删除文件而非仅清空文件内容?
问题:无法删除通过FileOutputStream创建的文件,仅能清空内容
尝试删除通过FileOutputStream创建的文件,但目前仅能清空文件内容,无法删除文件本身,代码如下:
val file = File("myFileName.txt") try { val fileOutputStream: FileOutputStream = context.openFileOutput( "myFileName.txt", Context.MODE_PRIVATE ) fileOutputStream.close() file.delete() } catch (e: IOException) { Log.d( "Error deleting file", "${e.localizedMessage}" ) }
解决方法
核心问题是你获取文件对象的路径错误:直接用File("myFileName.txt")指向的是设备根目录,但通过context.openFileOutput()创建的文件默认存在App内部存储的files目录下(路径类似/data/data/你的应用包名/files/),两者不是同一个文件,所以调用file.delete()实际是在删除一个不存在的文件,自然无效。
方案一:获取正确的文件路径
使用context.getFileStreamPath("myFileName.txt")直接定位到openFileOutput创建文件的目录,再执行删除:
try { val fileName = "myFileName.txt" // 获取openFileOutput创建文件的正确路径 val targetFile = context.getFileStreamPath(fileName) val fileOutputStream: FileOutputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE) fileOutputStream.close() // 确认文件存在后删除 if (targetFile.exists()) { val deleteSuccess = targetFile.delete() Log.d("Delete Result", "文件删除状态:$deleteSuccess") } } catch (e: IOException) { Log.d("Error deleting file", "${e.localizedMessage}") }
方案二:使用系统提供的简便删除方法
Android内置了context.deleteFile()方法,可直接删除通过openFileOutput创建的内部存储文件,无需手动处理路径:
try { val fileName = "myFileName.txt" // 先关闭已打开的流 val fileOutputStream: FileOutputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE) fileOutputStream.close() // 直接调用系统方法删除文件 val deleteSuccess = context.deleteFile(fileName) Log.d("Delete Result", "文件删除状态:$deleteSuccess") } catch (e: IOException) { Log.d("Error deleting file", "${e.localizedMessage}") }
内容的提问来源于stack exchange,提问作者GVG
相关产品推荐
相关产品推荐

