2017-03-16 123 views
0

我有一個JavaFX應用程序,它大量使用不同的媒體文件來顯示信息。問題是,所有這些文件都包含在.zip壓縮文件中。我如何訪問這些文件並播放它們?這是我當前的MediaPlayerManager類。如何打開檔案內的文件?

public class MediaPlayerManager { 

    private MediaPlayer mediaPlayer; 
    private Media media; 

    public void init(File file) { 
     media = new Media(file.toURI().toString()); 
     mediaPlayer = new MediaPlayer(media); 
     mediaPlayer.setAutoPlay(false); 
     mediaView = new MediaView(mediaPlayer); 
    } 

    public void play() { 
     mediaPlayer.play(); 
    } 

    public void stop() { 
     mediaPlayer.stop(); 
    } 

    public void pause() { 
     mediaPlayer.pause(); 
    } 
} 

這是我的控制器類應該能夠找到文件內的文件並播放它的方法。

public void playbackAudioFile(String audioPath, String audioName) { 

    // audioPath is the path to archive which contains audioName 

    MediaPlayerManager audioClip = new MediaPlayerManager(); 

    // Code missing for playing audio files inside .zip 

    System.out.println("Playing sound..."); 
    audioClip.play(); 
    System.out.println("Sound played!"); 
} 
+0

你能只是捆綁媒體代替jar文件中的文件以及應用程序? –

+0

我不能,因爲用戶在他已經使用該應用程序時提供了一個包含這些文件的存檔。 – Valrog

回答

0

借用Read directly a file within a Zip file - Java,可以重構MediaPlayerManager,使其接受URL直接的字符串形式:

public class MediaPlayerManager { 

    private MediaPlayer mediaPlayer; 
    private Media media; 

    public void init(String url) { 
     media = new Media(url); 
     mediaPlayer = new MediaPlayer(media); 
     mediaPlayer.setAutoPlay(false); 
     mediaView = new MediaView(mediaPlayer); 
    } 

    public void init(File file) { 
     init(file.toURI().toString()); 
    } 

    // ... 
} 

現在做

public void playbackAudioFile(String audioPath, String audioName) { 

    // audioPath is the path to archive which contains audioName 

    MediaPlayerManager audioClip = new MediaPlayerManager(); 

    String zipURL = new File(audioPath).toURI().toString(); 
    String jarURL = "jar:" + zipURL + "!" +audioName ; 

    audioClip.init(jarURL); 

    System.out.println("Playing sound..."); 
    audioClip.play(); 
    System.out.println("Sound played!"); 
} 
+0

不幸的是,這似乎並不奏效。我傳遞給媒體的路徑字符串看起來像「_jar:file:/home/valrog/dev/audio/notifications.zip!test.mp3_」。這可能是問題嗎? – Valrog