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

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

JVM終止后如何刪除文件?

JVM終止后如何刪除文件?

繁華開滿天機 2021-10-13 10:13:38
我正在開發(fā)一個媒體播放器應(yīng)用程序,我想在 JVM 終止后立即刪除在運行加密媒體文件后在特定文件夾中創(chuàng)建的解密媒體文件。我嘗試使用 deleteOnExit(); 功能,但經(jīng)過三次嘗試后,它不會刪除該文件。為什么會發(fā)生這種情況?下面是我用來刪除文件的代碼@FXML  MediaView mv;       MediaPlayer mp;       Media me;@FXML Slider volumeslider;@FXML Slider seekslider;@Overridepublic void initialize(URL location, ResourceBundle resources) {try {      String key = "Mary has one cat";     File inputFile = new File("C:\\Users\\Administrator\\Downloads\\video\\ec.mp4");    String path=new File("C:\\Users\\Administrator\\Downloads\\video\\dc.mp4").getAbsolutePath();     try {         CryptoUtils.decrypt(key, inputFile,  path);        } catch (CryptoException ex) {            ex.printStackTrace();        }    me=new Media(new File(path).toURI().toString());    mp=new MediaPlayer(me);    mv.setMediaPlayer(mp);    mp.setAutoPlay(true);    DoubleProperty width= mv.fitWidthProperty();    DoubleProperty height= mv.fitHeightProperty();    width.bind(Bindings.selectDouble(mv.sceneProperty(), "width"));    height.bind(Bindings.selectDouble(mv.sceneProperty(), "height"));    volumeslider.setValue(mp.getVolume() * 100);    volumeslider.valueProperty().addListener(new InvalidationListener() {        @Override        public void invalidated(Observable observable) {            mp.setVolume(volumeslider.getValue() / 100);        }    });    mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {        @Override        public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {            seekslider.setValue(newValue.toSeconds());            seekslider.maxProperty().bind(Bindings.createDoubleBinding(                    () -> mp.getTotalDuration().toSeconds(),                    mp.totalDurationProperty()));            File file = new File(path);             file.deleteOnExit();             file.delete();             file = null;        }    });
查看完整描述

2 回答

?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

在 Linux 上,此測試程序可靠地刪除當前目錄中的文件“test”。(對我來說。在我的機器上。Fedora Linux。Java 8。)


import java.io.File;

public class Test {

    public static void main(String[] args) {

        File file = new File("test");

        file.deleteOnExit();

    }

}

在 Linux 上,我能想到的唯一能阻止它工作的事情是:

  • 如果當前用戶沒有刪除文件的權(quán)限,

  • 如果當前目錄位于只讀文件系統(tǒng)上,或者

  • 如果 JVM 崩潰,則阻止“退出時刪除”機制工作。

在 Windows 上,您還必須考慮“測試”文件已被另一個應(yīng)用程序打開/鎖定的可能性。(或者可能通過這個應(yīng)用程序,雖然不是在這種情況下。)

請注意,deleteOnExit如果無法刪除文件,則不會拋出異常,File.delete(). 但是,java.nio.file.Files.delete(Path)如果由于某種原因刪除失敗,則會拋出一個很好的熱異常。這可能會給你一些關(guān)于實際發(fā)生的事情的線索。

如果這沒有幫助,您需要提供一個適當?shù)莫毩?MCVE,其他人可以在他們的 (Windows) 機器上試用。


根據(jù)您更新的代碼,問題似乎是MediaPlayer該類打開了媒體文件。嘗試mp.dispose()在應(yīng)用程序退出之前調(diào)用。


查看完整回答
反對 回復(fù) 2021-10-13
?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

File.deleteOnExit() 將通過 Runtime.addShutdownHook() 創(chuàng)建一個關(guān)閉鉤子。

使用 file.deleteOnExit() 沒有意義,然后使用 file.delete()... deleteOnExit 將在虛擬機終止時刪除文件。使用關(guān)閉鉤子時也可能出現(xiàn)問題:

1.如果JVM由于某些內(nèi)部錯誤而崩潰,那么它可能會崩潰而沒有機會執(zhí)行單個指令。

2.一旦啟動,Shutdown Hooks可以在完成前強行停止。如果進程在一段時間內(nèi)沒有終止(有限制),則 O/S 終止。


查看完整回答
反對 回復(fù) 2021-10-13
  • 2 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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