You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java控制台MP3播放器读取ArrayList路径报FileNotFoundException求助

问题分析与解决方案

问题根源

从你的控制台报错信息一眼就能发现关键问题:

java.io.FileNotFoundException: "/Users/harvhead/Desktop/San Tropez.mp3" (No such file or directory)

注意到路径被双引号包裹了!但实际你的本地文件路径是没有引号的——这就是导致FileNotFoundException的核心原因。你从文本文件读取的路径字符串带了多余的双引号,而硬编码时你写的是不带引号的正确路径,所以能正常播放。

问题出在哪

在PlayMusic类的access()方法中,你直接把分割后的路径字符串存入trackPath集合,完全没处理文本文件里路径自带的双引号:

String Pathtrack = details[5];
trackPath.add(Pathtrack);

你的music.txt里的条目应该是类似这种格式:

San Tropez,Pink Floyd,4:28,Rock,1,"/Users/harvhead/Desktop/San Tropez.mp3"

用逗号分割后,details[5]拿到的就是带双引号的字符串"/Users/harvhead/Desktop/San Tropez.mp3",用这个带引号的路径去找文件,系统自然找不到。

解决方案

只需要在读取路径时,去除字符串首尾的双引号即可,这里给你两种实用的处理方式:

方法1:正则去除首尾引号(兼容所有Java版本)

修改access()方法里路径赋值的代码:

// 去掉字符串开头和结尾的双引号
String Pathtrack = details[5].replaceAll("^\"|\"$", "");
trackPath.add(Pathtrack);

^\"匹配字符串开头的双引号,\"$匹配结尾的双引号,replaceAll会把这两个位置的引号清空。

方法2:用strip()简化处理(Java 11+可用)

如果你的Java版本是11或更高,可以用更简洁的写法:

// 直接去除首尾的双引号
String Pathtrack = details[5].strip("\"");
trackPath.add(Pathtrack);

验证修改

改完之后再运行代码,trackPath.get(x)输出的路径就会和你硬编码的完全一致(不带引号),FileInputStream就能正确定位到MP3文件了。

调试小技巧

以后遇到类似路径问题,建议输出路径时给内容加个边界标记,比如:

System.out.println("当前路径:[" + trackPath.get(x) + "]");

这样能一眼看到路径前后有没有多余的空格、引号这类隐藏字符,快速定位问题。

内容的提问来源于stack exchange,提问作者harvhead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:48:25