Java程序的资源应该放在哪里?

Java程序的资源应该放在哪里?,java,eclipse,resources,project,embedded-resource,Java,Eclipse,Resources,Project,Embedded Resource,我正在使用Eclipse用Java编程 我最近尝试在我的程序中播放声音文件。我这样做: URL url = this.getClass().getResource("ih.wav"); audioIn = AudioSystem.getAudioInputStream(url); clip = AudioSystem.getClip(); clip.open(audioIn); clip.start(); 这只在我试图将ih.wav放入bin文件夹时起作用,就好像bin文件夹是我的项目的“基本

我正在使用Eclipse用Java编程

我最近尝试在我的程序中播放声音文件。我这样做:

URL url = this.getClass().getResource("ih.wav");
audioIn = AudioSystem.getAudioInputStream(url);
clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
这只在我试图将ih.wav放入bin文件夹时起作用,就好像bin文件夹是我的项目的“基本文件夹”。将文件放在项目的主文件夹中无效。把它放在src文件夹中,也不起作用

有人能告诉我把Java程序的资源放在哪里吗?另外,如果我将资源导入Eclipse,这有关系吗?谢谢

编辑:

试图在主项目文件夹中创建resources文件夹,但仍出现NullPointerException:

        URL url1 = this.getClass().getResource("res/ah.wav");
        audioIn = AudioSystem.getAudioInputStream(url1);
        clip1 = AudioSystem.getClip();
        clip1.open(audioIn);

        URL url2 = this.getClass().getResource("res/eh.wav");
        audioIn = AudioSystem.getAudioInputStream(url2);
        clip2 = AudioSystem.getClip();
        clip2.open(audioIn);

        URL url3 = this.getClass().getResource("res/ih.wav");
        audioIn = AudioSystem.getAudioInputStream(url3);
        clip3 = AudioSystem.getClip();
        clip3.open(audioIn);

        clip1.start();
        clip2.start();
        clip3.start();

最佳做法是创建一个名为
res
resources
的文件夹(取决于您的软件包结构),您将在其中保存与项目相关的资源,如任何图像或声音文件

根据您的偏好,将此文件夹放入主项目文件夹
MyProject/res
,或放入相关包中,例如
main.java.res

编辑

为了更好地回答您的问题,我对
getResources()
方法不太熟悉,因此我个人建议使用一些类似以下的代码:

File file = new File("ih.wav");
audioIn = AudioSystem.getAudioInputStream(file);
clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();

如果您相应地更改了文件的路径(例如,
“main/resources/ih.wav”,则会生成您要查找的结果
或您存储文件的任何地方。

我会在
src
内创建一个
resources
文件夹,类似于
src/main/resources
。您想看看这是一个项目管理和理解工具,它对项目组织有很大帮助。

注意:我不使用Eclipse,我是我从未使用过Eclipse,我对Eclipse的了解相当于阅读其他帖子和回答这里的问题

在您的项目下,创建一个名为
resources
的目录。在这里放置您希望从应用程序中访问的所有“资源”。这些资源将作为嵌入式资源与应用程序捆绑在一起

从应用程序内部使用

this.getClass().getResource("/ah.wav")

假设您将文件放置在
资源
路径的顶层。如果它们位于子目录中,则需要提供完整路径


清理、构建和测试

将其放入src文件夹后是否重新编译?是否确定?是的,我确定。项目文件夹不应该是项目的“基本文件夹”吗?为什么bin是“起点”?创建一个
resources
文件夹,如
--src
--main`--resources bin文件夹不是起点。Eclipse只是将src目录中的所有内容编译到bin目录中。我认为将图像或任何内容放在src目录中会导致Eclipse将其复制到bin文件夹中。但单击@nachokk说,你也可以创建一个资源文件夹。。只要确保你告诉eclipse在编译/构建过程中包含它!@nachokk请回答它,这样我就可以投票;)尝试了你说的,似乎不起作用。请查看我的编辑。您在哪里创建的文件夹?请记住,您必须使用参数
getResource()
中的路径,我在src和bin所在的同一文件夹中创建了该路径。项目的主文件夹。我确实这样做了,但由于某种原因,我在尝试访问文件:\Any ideas?@user3150201时遇到了NullPointerException。好吧,这总是一个尝试和错误,但是如果有帮助的话,看看这个you@user3150201还要做一个整洁的建筑
this.getClass().getResource("/resources/ah.wav")