我有(無可否認奇怪)try/catch塊檢查是否存在File
。如果沒有,那麼我創建它並寫一個File
它。然後我讀了File
。Java不希望我在使用inputStream之前關閉outputStream?
我有一個ArrayList
正在通過從ObjectInputStream
讀取對象進行初始化。在原始文件中使用FileOutputStream
和ObjectOutputStream
,如果我對其調用close()
,那麼我的ArrayList
仍然爲null
。如果我只是刪除電話close()
,一切都按計劃進行。
這似乎倒退給我。如果我有某種類型的stream
對它開放,我會認爲文件系統以某種方式被「鎖定」。這就是爲什麼我想在使用inputStream
之前關閉outputStreams
。但是,不,Java不會讓這個工作,除非我保持打開outputStreams
。
這裏是我的代碼,包括註釋掉調用close()
,讓這個正常工作:
try {
File file = context.getFileStreamPath("file");
} catch (Throwable e) {
e.printStackTrace();
try {
FileOutputStream fileOutputStream = context.openFileOutput("file", Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
reminders = new ArrayList<Reminder>();
objectOutputStream.writeObject(reminders);
// fileOutputStream.close();
// objectOutputStream.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
try {
FileInputStream fileInputStream = context.openFileInput("file");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
if (objectInputStream != null) {
reminders = (ArrayList<Reminder>) objectInputStream.readObject();
}
} catch (Throwable t) {
t.printStackTrace();
}
你是否得到任何異常堆棧跟蹤? –
'if(objectInputStream!= null)'check在這裏應該是多餘的(構造函數調用永遠不會返回'null')。 –
看起來你正在寫一個空的ArrayList到流中。如果你寫一條記錄然後關閉它會發生什麼?它讓我懷疑輸出流對象是否爲你的對象分配了一些最小空間,除非你關閉它,否則它還沒有被GC'd處理過。 – ethrbunny