我正在将我们的应用程序从使用外部文件(使用文件名访问)转换为内部文件(使用FileInputStream
和FileOutputStream
对象访问)。但是,我收到了一个相当奇怪的错误:在finalize()
上,FileInputStream
有时投掷NullPointerException
。在Android的FileInputStream的finalize()期间导致NullPointerException的原因是什么?
logcat的告诉我:
Uncaught exception thrown by finalizer (will be discarded):
java.lang.NullPointerException:
at java.io.FileInputStream.close(FileInputStream.java:133)
at java.io.FileInputStream.finalize(FileInputStream.java:156)
at dalvik.system.NativeStart.run(Native Method)
望着FileInputStream source on docjar.com似乎有可能,这可能是一个空FileDescriptor
原因;不过,我希望能够将错误文件名传递给我的FileInputStream
构造函数,并捕获FileNotFoundException
,因为这是我可以使用Android内部系统完成的工作(对Context#fileList()
中的每个条目测量文件名的次数很少)。有没有办法解决这个问题?
注意一个终结器中的异常并不会导致任何实际的崩溃,但我觉得我应该尝试整理它。
我打电话'close()' - 这似乎一直发生在流不正确初始化时。但是,这不仅仅是将NPE转移到我称之为'close()'的方法吗?也感谢关于文件存在的提示:) –