我有一个非常奇怪的问题,我正在尝试使用一些 Java 代码和 JLayer 播放一些 MP3。我有一个方法设置来生成文件路径,但这让我很伤心。这是返回语句(以及该方法中涉及的所有代码):
private static String findSoundFile(String numSeq)
{
return "file:///Users/user/Desktop/FinishedPhone/" + numSeq + ".mp3"
}
我有一组大约 150 个 mp3 文件,全部命名为 1.mp3、2.mp3 等。它们最多可达 156 个(中间有一些缺失)。根据用户输入的 3 位代码,它会播放其中一种声音。这段代码完美地适用于 1-99 之间的任何东西,当你到达 100 时它会停止工作。当用户输入 100 或 110 或你有什么时,Java 会抛出 FileNotFoundException。我向你保证,文件在那里。下面是使用 findSoundFile 返回的文件路径的代码:
public static void processNumberSequence(String numSeq) throws IOException
{
if (numSeq != "")
{
String soundLoc = findSoundFile(numSeq);
File file = new File(soundLoc);
System.out.println("System can read: " + file.canRead());
System.out.println(soundLoc);
SoundPlayer soundToPlay = new SoundPlayer(soundLoc);
soundToPlay.play();
}
}
当我填写 numSeq 应该填写的空间时,它变得更奇怪了,如下所示:
private static String findSoundFile(String numSeq)
{
return "file:///Users/user/Desktop/FinishedPhone/110.mp3";
}
上面的代码工作正常,播放声音没有挂断。任何想法将不胜感激,如果有任何困惑,请询问。
堆栈跟踪:
java.io.FileNotFoundException: /Users/user/Desktop/FinishedPhone/111.mp3 (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
at java.net.URL.openStream(URL.java:1010)
at SoundPlayer.play(SoundPlayer.java:26)
at SerialProcessor.processNumberSequence(SerialProcessor.java:37)
at SerialTest.serialEvent(SerialTest.java:98)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
ls -l 文件之一:
-rw-r--rw- 1 user staff 432923 Feb 27 14:15 /Users/user/Desktop/FinishedPhone/111.mp3
ls -l 用于 100 岁以下的人:
-rw-r--rw- 1 user staff 480570 Feb 25 20:43 /Users/user/Desktop/FinishedPhone/99.mp3