【问题标题】:java Audio file locationjava音频文件位置
【发布时间】:2017-11-01 19:19:29
【问题描述】:

我正在使用 Java 开发一个游戏,我有一个类可以将音频文件作为 InputStream 读取,然后通过 AudioPlayer 播放该文件。

我不断收到未找到文件的异常。

我尝试将音频文件放在许多不同的位置,但没有任何效果。

这是我的课程代码:

public void play(String string,int sleep) throws IOException 
{
    //this part does not recognize file
    try {
        //System.out.println(System.getProperty());

        AS = new AudioStream(new FileInputStream(string));
        AD = AS.getData();
        loop = new ContinuousAudioDataStream(AD);
    }
    catch(IOException error){
        System.out.print(string +" file not found");
    }
    AP.start(loop);     
}

我传递了一个类似 ("audio/beginning.wav") 的字符串

【问题讨论】:

  • 如果文件存在于指定位置,你有权限吗?你能展示/描述你的项目结构吗?
  • 音频文件的路径应该相对于源代码的基本目录。例如,如果 audio 目录位于包含您的 main 方法的 src 目录旁边,则您的字符串应该是“../audio/beginning.wav”。在不了解项目结构的情况下,很难知道要通过什么。
  • 结构为“project/src/game/main method”,音频文件夹在“project/audio”中
  • 您是从 IDE 运行的吗?尝试打印绝对路径来调试它,如我的回答中所述。
  • 我正在使用 Eclipse。绝对路径指向项目文件夹。

标签: java eclipse file audio stream


【解决方案1】:

您使用的路径与程序运行时定义的工作目录相关。

如果您从 Eclipse 运行程序,默认情况下它是程序的根目录(程序的顶级文件夹)。所以通常将文件放在program_folder/audio/beginning.wav 应该可以工作。

但是,您可以在 Eclipse 中使用的 运行配置 中更改工作目录来运行程序:转到选项卡Arguments,您将找到Working directory

要调试问题,请检查以下输出:

System.out.println(new File("").getAbsolutePath());    

另一个选项是使用文件的绝对路径。

【讨论】:

  • 绝对路径给了我项目的根目录。我尝试将文件放在那里,但它仍然无法识别它。我在根目录中有另一个图像文件夹,它工作得很好。我试着把音频放在那里,还是不行。
  • 能否请您发布堆栈跟踪?此外,在play() 中,尝试打印System.out.println(new File(string).getAbsolutePath()); 并检查它是否符合您的预期。如果您使用的是 Windows,请确保它的真实扩展名没有被隐藏。
  • java.io.IOException: 无法在 audio.Audio.play(Audio.java:32) 的 sun.audio.AudioStream.getData(Unknown Source) 处创建 AudioData 对象
  • C:\Users\lettuce\eclipse-workspace\jajaGui\AudioFiles\beginning.wav 这是路径
  • 那么文件是否位于该路径中?你检查它是否有隐藏的扩展名?尝试打印System.out.println(Arrays.asList(new File("AudioFiles").list())); 并查看文件是否按预期显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多