我正在尝试用Java播放一首歌。我尝试了很多不同的方法,它们都没有给我这样的错误:
Exception in thread "main" java.io.FileNotFoundException: \workspace\playsound\song.wav (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at playsound.LoopSound.main(LoopSound.java:20)
我只需要一个简单的方法就可以从我的桌面/ src中获取song.wav并使其播放。这适用于注释掉的链接,但不适用于文件:
package playsound;
import java.net.URL;
import javax.sound.sampled.*;
import java.io.File;
public class LoopSound {
public static void main(String[] args) throws Exception {
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
File file = new File("c:/Users/liam/workspace/playsound/song.wav");
System.out.println("length : " + file.length());
URL url = new URL("file:///workspace\\playsound\\song.wav");
//"http://www.intriguing.com/mp/_sounds/hg/fart.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
clip.loop(5);
javax.swing.JOptionPane.showMessageDialog(null, "Close to exit!");
}
}
我确信它在那里,因为我已经测试了它的位置:
工作目录= C:\ Users \ liam \ workspace \ playsound
它可以告诉我它有多大:
长度:2914585
public static void main(String[] args) throws Exception {
System.out.println("Working Directory = " +
System.getProperty("user.dir"));
File file = new File("c:/Users/liam/workspace/playsound/song.wav");
System.out.println("length : " + file.length());
new File("workspace\\playsound\\song.wav").toURI().toURL();
这给了我错误:
Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at playsound.musicplayer.main(musicplayer.java:20)
答案 0 :(得分:3)
如果您可以播放网址,我建议您尝试以下操作:
new File(path).toURI().toURL();
让我知道它是否有效。
同样根据javadocs,您可以直接使用文件。所以你不需要URL。如果你得到一个FileNotFoundException,要么是因为路径错误,文件不存在,要么你没有正确的权限。
答案 1 :(得分:2)
AudioSystem
允许您指定File
引用; AudioSystem#getAudioInputStream(File)
这意味着您可以直接指定File
,而无需先将其转换为某种类型的网址...
File file = new File("c:/Users/liam/workspace/playsound/song.wav");
System.out.println("length : " + file.length());
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file);
如果你看一下路径引用......
"c:/Users/liam/workspace/playsound/song.wav"
"file:///workspace\\playsound\\song.wav"
不一样,它应该更像file://C/Users/liam/workspace/playsound/song.wav
或其他一些。
您还应该在网址/
中使用\
而不是"file://workspace/playsound/song.wav"
,但已经说过,只使用File#getURL#getURI
答案 2 :(得分:0)
您的网址缺少您的驱动器号。您可以为包含驱动器号的正确文件URL构建字符串,也可以向File对象请求URL,或者您可以在另一个答案中提供建议。