示例代碼如下:
/*從硬盤讀到內存*/
FileInputStream in=new FileInputStream("info1.txt");
/*從內存寫入磁盤,此處重新創建了info1.txt文件*/
FileOutputStream out=new FileOutputStream("info1.txt");
情況描述:輸入流在前,輸出流在後。
結果:輸入流無法讀取任何數據,並且操作的文件已經爲空。
分析:FileOutputStream的構造方法如下
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}
可以看出,輸出流直接創建了一個File對象。那就說明,創建了輸出流後,將數據輸入的文件是重新創建的,直接將之前的已存在的文件進行替換(覆蓋形容也不錯),所以,文件就會爲空。關於前一行代碼創建的輸入流沒有報錯,反而讀取的文件中的數據爲空?是因爲,創建輸出流時,文件被替換爲空文件,而輸入流對象引用裏面存儲的是文件的絕對路徑,所以,儘管文件被替換了,但是絕對路徑沒有錯,所以輸入流,就直接從新創建的文件中進行操作文件。(關於輸入流問題的解釋,是我自己認爲的,也沒有去認證,所以,僅供參考)。