我正在 Java FX 中为音乐播放器编写代码,我使用 MediaPlayer
类,该类由 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);
}
}
}
我收到如下错误日志:
SEVERE: null java.net.URISyntaxException: Illegal character in path at index 78: file:///C:/Users/Diego%20Aguilar/Music/3%20Grandes%20de%20la%20Banda/AlbumArt_{9AEABE24-F5A2-441C-A71A-D061E000A9BA}_Large.jpg
最佳答案
像之前一样使用 File#toURI()
以避免遇到编码问题,并使用 FilenameFilter
将列表限制为仅媒体文件。代码如下所示。
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:FilenameFilter , File#toURI()
关于java - 从 Java FX 中的 File 类中的文件生成 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18435330/