OutputStream與InputStream同時作用與一個文件情況

示例代碼如下:

        /*從硬盤讀到內存*/
        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對象。那就說明,創建了輸出流後,將數據輸入的文件是重新創建的,直接將之前的已存在的文件進行替換(覆蓋形容也不錯),所以,文件就會爲空。關於前一行代碼創建的輸入流沒有報錯,反而讀取的文件中的數據爲空?是因爲,創建輸出流時,文件被替換爲空文件,而輸入流對象引用裏面存儲的是文件的絕對路徑,所以,儘管文件被替換了,但是絕對路徑沒有錯,所以輸入流,就直接從新創建的文件中進行操作文件。(關於輸入流問題的解釋,是我自己認爲的,也沒有去認證,所以,僅供參考)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章