2017-03-16 114 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