java - 从 Java FX 中的 File 类中的文件生成 URI?

标签 java javafx uri

我正在 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/

相关文章:

java - 如何在jasper报表中将两个字段相乘和相加

java - Spring中 Autowiring 构造函数中的@PersistenceContext

javafx - 为什么不能设置AnchorPane的可调整大小属性?

java - 如何在JavaFx中动态删除节点

php - 尝试在 Codeigniter 中传递 url 中的值时遇到 404 页面未找到

java - Prime Sieve 仅打印整数 1-3

java - SWT:透明外壳也使小部件透明

fonts - JavaFX FontMetrics

php - CodeIgniter current_url 不显示查询字符串

android - 如何将音频文件存储到android的内部存储中