1
new FileInputStream("C:\\Users\\Adam\\Documents\\NetBeansProjects\\TicTacToe_3.0 beta\\src\\resources\\System Shock 2 soundtrack Med Sci 1.mp3");

BufferedImage bf = ImageIO.read(new File("C:\\Users\\Adam\\Documents\\NetBeansProjects\\TicTacToe_3.0 beta\\src\\images\\black-squareMod.jpg"));

上面的两行代码从给定的路径中获取某种资源。我想更改它们,以便它们引用同一个 Netbeans 项目中的一个包,该项目包含相同的资源。

例如,

文件输入流();

...正在获取音频文件。

BufferedImage bf = ImageIO.read(new File());

...正在获取 .jpg 图像。

这两个文件位于同一个 Netbeans 项目中名为“resources”的包中。如何更改指定的路径,以便它们直接进入这些包,而不是通过我的硬盘?

谢谢。

4

2 回答 2

1

我找到了解决方案:

new FileInputStream("C:\\Users\\Adam\\Documents\\NetBeansProjects\\TicTacToe_3.0 beta\\src\\resources\\System Shock 2 soundtrack Med Sci 1.mp3");

已改为

ClassLoader.getSystemResourceAsStream("resources/System Shock 2 soundtrack Med Sci 1.mp3");

这负责音频。

至于 BufferedImage 对象:

BufferedImage bf = ImageIO.read(new File("C:\\Users\\Adam\\Documents\\NetBeansProjects\\TicTacToe_3.0 beta\\src\\images\\black-squareMod.jpg"));

改为

BufferedImage bf = ImageIO.read(ClassLoader.getSystemResource("images/black-squareMod.jpg"));

完美运行。

于 2013-05-13T23:35:37.187 回答
0

Class.getResource() 和 Class.getResourceAsStream() 方法是相对于类位置的。它们旨在用于此目的。

来自 javadoc

Finds a resource with a given name. The rules for searching resources associated
with a given class are implemented by the defining class loader of the class. This 
method delegates to this object's class loader. If this object was loaded by the 
bootstrap class  loader, the method delegates to ClassLoader.getSystemResource(java.lang.String).

Before delegation, an absolute resource name is constructed from the given resource
name using this algorithm:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is 
the portion of the name following the '/'.

Otherwise, the absolute name is of the following form:
modified_package_name/name Where the modified_package_name is the package name of 
this object with '/' substituted for '.' ('\u002e').

一个示例程序,如果存在,它将获取 src/resources/test.properties 中文件的 url。

public class TestGetResource {

    public TestGetResource(){
        Object resource = this.getClass().getResource("/test.properties");
        System.out.println(resource);
    }

    public static void main(String args[]){
        new TestGetResource();
    }
}

调试试试这个

Object resource = this.getClass().getResource("/");

这应该返回项目的二进制路径。看看那里 NetBeans 应该在创建项目时复制那里的所有资源,如果没有,那么你将得到空值。

你的目录结构应该是

src/main/java
src/main/resources

于 2013-05-13T01:19:02.103 回答