2011-07-27 37 views
2

在java中有沒有什麼方法來讀取文件的內容,在關閉它之前正在被另一個處理程序更新?Java - 如何同時讀取和寫入文件?

+2

這是在單個JVM中嗎?你需要做什麼的根本原因是什麼 - 你解決了什麼問題? –

+2

爲什麼不建立這兩個處理程序之間的直接流? – TC1

+1

與ThorbjørnRavn Andersen及其他人的評論一致 - 您需要談論您擁有的實際潛在問題,而不是您認爲的解決方案(然後詢問如何實施該解決方案)。如果不按照你所要求的方式進行操作,那麼你很可能已經有方法去做你最終想達到的目標。我懷疑你想執行進程間通信,但我只是有一個瘋狂的猜測。 – Chii

回答

2

從理論上講,它很容易做到,但是文件並不是用來以這種方式交換數據,而是根據您的要求進行交換,可能會非常棘手。這就是爲什麼沒有通用的解決方案。

例如如果您想在另一個進程寫入文件時讀取文件,即使作者尚未完成,閱讀線程也會看到EOF。您必須重新打開文件並跳至上次閱讀文件的位置並繼續。寫入線程可能會滾動它正在寫入的文件,這意味着讀取必須檢測並處理它。

你想要做什麼特異性?

+0

不是用這種方式交換數據嗎? SQLite似乎有所不同;-)好吧,我把它拉伸一點。 – 2011-07-27 09:59:30

3

這取決於操作系統。

傳統上,POSIX-y操作系統(Linux,Solaris,...)在讀取和寫入時都可以打開文件,即使是單獨的進程也是完全沒有問題的(它們甚至支持讀取正在讀取的文件來自和/或寫入)。

在Windows中,更常見的方法是獨佔打開文件(與普遍認爲的相反,Windows 確實支持非排他性文件訪問,它很少被應用程序使用)。

Java無法指定您想要訪問文件的方式,因此使用了平臺默認設置(Linux/Solaris上的共享訪問,Windows上的獨佔訪問)。

*對於Java 7中的NIO和新的NIO,這可能是錯誤的,但我不是一個大的NIO專家。