java - MediaPlayer 不播放文件名中的某些字符

标签 java javafx media-player

MediaPlayer 适用于大多数文件,文件名中包含某些字符的情况除外。

MediaException: MEDIA_UNAVAILABLE : T:\Music\Paradis - Hémisph?re.m4a (The system cannot find the file specified)

    public static void play(File song) {
    // Checks if file exists
    if (!song.exists()) {
        System.out.println("Song doesn't exist! " + song.getAbsolutePath());
        return;
    }

    Media media = new Media(song.toURI().toString());
    player = new MediaPlayer(media);

    player.play();

}

调用该函数的代码:

FXMediaPlayer.play(new File("T:\\Music\\Paradis - Hémisphère.m4a"));

一些字符是:é ê ä

我应该如何正确解析文件名,还是 MediaPlayer 有问题?

最佳答案

解决了!我必须将文件名编码为 UTF-8。

还必须将“+”替换为“%20”,更多信息:https://stackoverflow.com/a/4737967/3791826

不支持带有 UTF-8 字符的文件名,因为它给了我 URISyntaxException

String filePath = null;
    try {
        //Encoding filename to UTF-8, doesn't support folders with UTF-8 characters
        filePath = song.getParentFile().toURI().toString()
                + URLEncoder.encode(song.getName(), "UTF-8").replace("+", "%20");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
Media media = new Media(filePath);

关于java - MediaPlayer 不播放文件名中的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802443/

相关文章:

iphone - 如何播放资源库中的视频文件

java - com.sun.faces.renderkit.html_basic.TextRenderer 存在哪些 Java API 替换(如果有)

java - 发生此错误时 Error :(1, 1) java.desktop 和 java.datatransfer 中的 java : module JavaFX reads package java. awt

java - 如何通过其图形拖动选项卡?

java - 无法使用 JavaFX 将矩形拖放到所需位置

iphone - MPMoviePlayerViewController 可以工作,MPMoviePlayerController 不能..为什么?

android - 当Android MediaPlayer进入错误循环: error(-38, 0)时如何优雅地恢复

java - NoClassDefFoundError when running Facebook 官方例子

java - Sonarlint 提示我的源文件中有许可证 header

java - 问 - ReSTLet/Spring - NotWritablePropertyException 带有教程示例?