我試圖將文件從一個目錄複製到另一個目錄,但我希望阻止該調用,以便程序只在整個文件傳輸後才執行。Files.copy的阻止/同步版本
目前我使用Files.copy()
,它使用非阻塞IO並立即返回。還有什麼其他選擇(最好是內置於Java標準庫中)我必須解決這個問題嗎?
非常感謝, 加雷思
我試圖將文件從一個目錄複製到另一個目錄,但我希望阻止該調用,以便程序只在整個文件傳輸後才執行。Files.copy的阻止/同步版本
目前我使用Files.copy()
,它使用非阻塞IO並立即返回。還有什麼其他選擇(最好是內置於Java標準庫中)我必須解決這個問題嗎?
非常感謝, 加雷思
Files.copy
不是異步的,直到複製完成纔會返回。
通常情況下,如果一個方法是異步的,JavaDoc將非常清楚,並且該方法將接受某種形式的回調(一個lambda或實現接口的對象和它將調用的方法等) ,或者返回可用於檢查完成(或錯誤)的內容。 Files.copy
沒有這樣做,它的Javadoc沒有說它是異步的,所以沒有理由懷疑它是異步的。 (我只是做了一個快速測試以確保它,直到複製完成纔會返回。)
對於同步複製,您可以使用流從一個文件描述符複製到另一個。 欲瞭解更多信息請查看以下鏈接: http://www.mkyong.com/java/how-to-copy-file-in-java/
對不起,跳上了這個槍。相應地更新了我的答案 –
看java.io
包爲您解答。據我所知,那裏的File類操作是阻塞的。
我在['Files.copy' javadoc](http://docs.oracle.com /javase/8/docs/api/java/nio/file/Files.html#copy-java.nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption...-)說操作是異步的。通常情況下,異步操作接受某種形式的回調(lambda或實現它將調用的接口的對象),或者返回可用於檢查是否完成的內容。 'Files.copy'只是返回一個'Path'。由於尊重,我認爲你已經在使用你想要的東西,只是誤解了一些東西。 –
我是新來的java,所以我可能會誤解一些東西。 [此](http://stackoverflow.com/a/106807/1199721)prevoius回答說,它將請求延遲到操作系統,它所在的NIO軟件包也讓我相信它是非阻塞的 –
@ Gareth:我剛剛檢查過 - 「Files.copy」在複製完成之前不會返回。 –