3 回答

TA貢獻1835條經驗 獲得超7個贊
我想你誤會了。這些操作實際上是同步的,所以你很高興來到這里。Files.write
以 ajava.io.OutputStream
為例。
Some NamecreateDirectory
解決了Linux的可能實現。
在 Windows 上,createDirectory
使用CreateDirectory WinAPI 函數。
WindowsNativeDispatcher.CreateDirectory(var3.getPathForWin32Calls(), var4.address() /* Security descriptor */);
Buffers
,Channels
并且Selectors
是非阻塞的。

TA貢獻1777條經驗 獲得超10個贊
我已經想通了。問題實際上不在于 Files 類的非阻塞性質。我混合了 File 對象和 Path 對象,并在它們之間進行轉換,java 似乎對目錄和文件是什么感到困惑,而是創建了被調用的文件,blah/foo
而blah/bar
不是foo
在名為blah
. 我剛剛切換到傳遞 Path 對象而不是 File 對象來表示我的文件和目錄,并且一切正常。

TA貢獻1795條經驗 獲得超7個贊
是否有“正確”的方法來確定 Files.createDirectories(path) 何時完成
一回來就完成了。這很可能是一個簡單的包裝mkdir(2)
此外,非阻塞語義對常規文件沒有影響(至少在 Linux 中,至少現在)http://man7.org/linux/man-pages/man2/open.2.html
O_NONBLOCK 或 O_NDELAY
[...]
請注意,此標志對常規文件和塊設備無效;也就是說,無論是否設置了 O_NONBLOCK,當需要設備活動時,I/O 操作都會(短暫地)阻塞。
添加回答
舉報