第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Windows上可靠的File.renameTo()替代方法?

Windows上可靠的File.renameTo()替代方法?

File.renameTo()似乎Java 是有問題的,尤其是在Windows上。如API文檔所述,此方法的行為的許多方面本質(zhì)上與平臺(tái)有關(guān):重命名操作可能無法將文件從一個(gè)文件系統(tǒng)移動(dòng)到另一個(gè)文件系統(tǒng),它可能不是原子的,并且如果具有目標(biāo)抽象路徑名的文件可能無法成功已經(jīng)存在。應(yīng)該始終檢查返回值,以確保重命名操作成功。就我而言,作為升級(jí)過程的一部分,我需要移動(dòng)(重命名)可能包含千兆字節(jié)數(shù)據(jù)(很多子目錄和大小不同的文件)的目錄。移動(dòng)始終在同一分區(qū)/驅(qū)動(dòng)器中完成,因此并不需要物理上移動(dòng)磁盤上的所有文件。這里不應(yīng)該有任何文件鎖定的目錄中的內(nèi)容被移動(dòng)了,不過,很多時(shí)候,renameTo()無法完成其工作,并返回false。(我只是猜測(cè)也許某些文件鎖在Windows上會(huì)任意地到期。)當(dāng)前,我有一個(gè)使用復(fù)制和刪除的后備方法,但是這種方法很麻煩,因?yàn)樗赡芤ㄙM(fèi)很多時(shí)間,具體取決于文件夾的大小。我也在考慮簡(jiǎn)單地記錄一個(gè)事實(shí),即用戶可以手動(dòng)移動(dòng)文件夾,以免潛在地等待數(shù)小時(shí)。但是正確的方法顯然是自動(dòng)而快速的。所以我的問題是,您是否知道另一種可靠的方法,可以在Windows上使用Java(使用普通的JDK或某些外部庫(kù))進(jìn)行快速移動(dòng)/重命名?;蛘?,如果您知道一種檢測(cè)和釋放給定文件夾及其所有內(nèi)容(可能是成千上萬(wàn)個(gè)單獨(dú)文件)的任何文件鎖的簡(jiǎn)便方法,那也可以。
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

另請(qǐng)參見Files.move()JDK 7中的方法。


一個(gè)例子:


String fileName = "MyFile.txt";


try {

    Files.move(new File(fileName).toPath(), new File(fileName).toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING);

} catch (IOException ex) {

    Logger.getLogger(SomeClass.class.getName()).log(Level.SEVERE, null, ex);

}


查看完整回答
反對(duì) 回復(fù) 2019-09-21
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于它的價(jià)值,還有一些其他概念:

  1. 在Windows上,renameTo()即使目標(biāo)目錄存在,即使它為空,似乎也會(huì)失敗。就像我在Linux上嘗試過的renameTo()那樣,只要目標(biāo)為空,只要目標(biāo)存在,它就會(huì)成功,這使我感到驚訝。

    (顯然,我不應(yīng)該假設(shè)這種事情在所有平臺(tái)上都可以起作用;這正是Javadoc警告的。)

  2. 如果您懷疑可能存在一些揮之不去的文件鎖,請(qǐng)稍等片刻再進(jìn)行移動(dòng)/重命名可能會(huì)有所幫助。(在安裝程序/升級(jí)程序的某一點(diǎn)上,我們添加了一個(gè)“睡眠”操作和一個(gè)不確定的進(jìn)度條,持續(xù)了大約10秒鐘,因?yàn)槟承┪募赡軖熘?wù))。甚至可以執(zhí)行一個(gè)簡(jiǎn)單的重試機(jī)制try renameTo(),然后等待一段時(shí)間(可能逐漸增加),直到操作成功或達(dá)到某個(gè)超時(shí)為止。

就我而言,大多數(shù)問題似乎都可以通過兼顧以上兩者來解決,因此我們根本不需要進(jìn)行本機(jī)內(nèi)核調(diào)用或諸如此類的事情。


查看完整回答
反對(duì) 回復(fù) 2019-09-21
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

就我而言,這似乎是我自己的應(yīng)用程序中的死對(duì)象,該對(duì)象保留了該文件的句柄。因此,該解決方案對(duì)我有用:


for (int i = 0; i < 20; i++) {

    if (sourceFile.renameTo(backupFile))

        break;

    System.gc();

    Thread.yield();

}

優(yōu)點(diǎn):速度非???,因?yàn)闆]有Thread.sleep()帶有特定的硬編碼時(shí)間。


缺點(diǎn):20的限制是一些硬編碼的數(shù)字。在我所有的測(cè)試中,i = 1就足夠了。但可以肯定的是,我將其保留為20歲。


查看完整回答
反對(duì) 回復(fù) 2019-09-21
  • 3 回答
  • 0 關(guān)注
  • 1012 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)