亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Java 7 文件 API 等待操作完成?

如何使用 Java 7 文件 API 等待操作完成?

偶然的你 2022-06-23 17:32:58
我正在編寫一些 java 代碼來創建一個目錄,然后將一些文件放在該目錄中。我不關心文件的創建順序,但是,要成功創建文件,目錄需要先退出。我想使用(新的)java.nio.Files api,因為它有一套非常優雅的方法來處理文件和目錄。雖然Files類是非阻塞的很好,但這意味著該目錄并不總是存在。是否有“正確”的方法來確定何時Files.createDirectories(path)完成?不是特別復雜(這就是我喜歡 Files api 的原因),但這里有一些示例代碼:Files.createDirectories(path);Files.write(filename1, "some content".getBytes());Files.write(filename2, "some other content".getBytes());在上面path可能是/tmp/blahand filename1=/tmp/blah/foo和filename2= /tmp/blah/bar。顯然,我可以使用其他一些類或庫(如 Commons IO)來做到這一點,但 java.nio.Files 中的構建非常好。
查看完整描述

3 回答

?
qq_花開花謝_0

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非阻塞的。


查看完整回答
反對 回復 2022-06-23
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

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



查看完整回答
反對 回復 2022-06-23
?
一只萌萌小番薯

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 操作都會(短暫地)阻塞。


查看完整回答
反對 回復 2022-06-23
  • 3 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號