2017-03-16 3 views
0

J'ai une application JavaFX qui utilise intensément différents fichiers multimédias pour afficher des informations. Le problème est que tous ces fichiers sont contenus dans une archive .zip. Comment puis-je accéder à ces fichiers et les lire par conséquent? C'est ma classe MediaPlayerManager actuelle.Comment ouvrir un fichier qui se trouve dans une archive?

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(); 
    } 
} 

C'est la méthode de ma classe Controller qui devrait être capable de trouver un fichier dans l'archive et de le lire.

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

Pouvez-vous regrouper juste les médias fichiers dans le fichier jar, avec l'application, à la place? –

+0

Je ne peux pas, car l'utilisateur fournit une archive qui contient de tels fichiers lorsqu'il utilise déjà l'application. – Valrog

Répondre

0

emprunt de Read directly a file within a Zip file - Java, vous pouvez factoriser votre MediaPlayerManager pour qu'il accepte une forme de chaîne d'un URL directement:

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()); 
    } 

    // ... 
} 

et maintenant ne

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

Malheureusement, cela ne semble pas fonctionner. Mon chemin La chaîne transmise aux médias ressemble à "_jar: file: /home/valrog/dev/audio/notifications.zip! Test.mp3_". Est-ce que ceci pourrait être le problème? – Valrog