Java “发生共享冲突”-由未关闭的流导致?

Java “发生共享冲突”-由未关闭的流导致?,java,windows,file,inputstream,Java,Windows,File,Inputstream,我正在为Minecraft资源包开发一个工具,基本上它显示树结构、图像预览,并允许您编辑一些内容 它在Linux上运行得很好,但Windows用户不断报告如下错误: 我有一个错误,无法在之后保存我的新纹理 使用绘画编辑它们: 访问时发生共享冲突 C:\Users\Me\Appdata\Roaming.mcRPW\tmp\workdir\project\u files\assets\minecraft\textures\blocks\repeater\u off.png 我使用InputStrea

我正在为Minecraft资源包开发一个工具,基本上它显示树结构、图像预览,并允许您编辑一些内容

它在Linux上运行得很好,但Windows用户不断报告如下错误:

我有一个错误,无法在之后保存我的新纹理 使用绘画编辑它们:

访问时发生共享冲突 C:\Users\Me\Appdata\Roaming.mcRPW\tmp\workdir\project\u files\assets\minecraft\textures\blocks\repeater\u off.png

我使用InputStream读取预览,结果证明,该方法在完成后不会关闭它。我以为垃圾收集器会处理这个问题,但也许我错了。无论如何,我不知道发生了什么,我可以在Linux上编辑图像

这篇文章是关于Java应用程序与文件交互的唯一方式


我的怀疑正确吗?如果没有,如何修复它?

如果您发布代码,将会有所帮助。您必须对在finally块中显式打开的任何流调用close,或者最好使用@McDowell。代码不会显示比我描述的更多的内容。我不会关闭这条小溪。现在我发布了一个补丁,最终使用并关闭了它,但我想知道这是否真的是所有问题的原因。是的,这就是问题的原因。如果你不关闭文件,你怎么能期望InputStream知道你已经处理完了它?@HarryJohnston我想当GC调用它时,它会自动关闭。显然情况并非如此。@MightyPork:是的,它将在最终确定后关闭。但这不是决定性的——如果InputStream对象仍在作用域中,则根本不会发生。我不知道情况是否如此,因为你拒绝发布你的代码。