2

我正在为 Java FX 中的音乐播放器编写代码,我使用由MediaPlayer类初始化的Media类。到目前为止,我认为 Media 构造函数的源必须URI在字符串中,所以我编写了这段代码,用于将歌曲文件列表添加到播放列表并播放这样的列表:

public void setPlaylist (List<File> lista) {

    songsList.clear();
    for (File s : lista) {
        songsList.add(s.toURI());
    }
}

这工作正常。但是,当我想获取一个包含文件夹路径的文件,并以 URI 格式输入每个文件的名称时,我遇到了一些麻烦,这是我迄今为止尝试过的:

public void setPlaylist (File folder) {

    songsList.clear();
    for (String s : folder.list()) {
        try {
            songsList.add(new URI("file:///" + (folder + "\\" + s).replace("\\", "/").replaceAll(" ", "%20")));
        } catch (URISyntaxException ex) {
            Logger.getLogger(PlayList.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

我收到这样的错误日志:

严重:null java.net.URISyntaxException:索引 78 处的路径中存在非法字符:file:///C:/Users/Diego%20Aguilar/Music/3%20Grandes%20de%20la%20Banda/AlbumArt_{9AEABE24-F5A2-441C -A71A-D061E000A9BA}_Large.jpg

4

3 回答 3

1

而不是使用String s : folder.list()use File s : folder.listFiles()... 然后使用文件中的 URL。

于 2013-08-26T01:36:36.613 回答
1

像以前一样使用File#toURI()以避免遇到编码问题,并使用 aFilenameFilter将列表限制为仅媒体文件。下面是代码的样子。

public void setPlaylist (File folder) {
    songsList.clear();
    File[] musicFiles = folder.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".m4a"));
        }
    });
    for (File file : musicFiles) {
        songsList.add(file.toURI());
    }
}

请参阅 JavaDocs:FilenameFilterFile#toURI()

于 2013-08-26T01:56:12.127 回答
0

您的文件 URI 包含一个尖括号{,这导致SEVERE: null java.net.URISyntaxException

您需要有一个有效的文件路径才能创建正确的 URI。

这是指向URI RFC的链接,用于引用 URL 中允许和不允许的内容。

于 2013-08-26T01:14:06.137 回答