如何使用this.getClass()。getResource(String)?

时间:2012-12-15 20:30:04

标签: java

我无法理解这段代码的错误。

public void run(String url) {

        try {
            FileInputStream file;
            file = new FileInputStream(this.getClass().getResource(url));
            Player p = new Player(file);
            p.play();
        }catch(Exception e){
            System.err.print( url + e);
        }
    }

当我尝试运行它时,它说我“找不到适合FileInputStream(URL)的构造函数”。为什么会这样?

4 个答案:

答案 0 :(得分:3)

使用:

  • getClass().getResourceAsStream(classpathRelativeFile)用于类路径资源
  • new FileInputStream(pathtoFile)用于文件系统资源。

答案 1 :(得分:2)

使用getResourceAsStream

更简单
InputStream in = getClass().getResourceAsStream(url);
Player p = new Player(file);

答案 2 :(得分:2)

将文件放在类路径的文件夹的根目录(生成.class文件的文件夹)中,然后使用以下语句:

  InputStream inputStream = 
                  getClass().getClassLoader().getResourceAsStream(filePath);
  Player p = new Player(inputStream );

这里filePath是相对文件路径w.r.t.根文件夹。

答案 3 :(得分:1)

FileInputStream构造函数的参数是File,String ...(请参阅http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html),但Class.getResource返回URL(请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html),而不是File或String。 尝试使用

public void run(String url) {

    try {
        FileInputStream file;
        file = new FileInputStream(new File(this.getClass().getResource(url).toURI()));
        Player p = new Player(file);
        p.play();
    }catch(Exception e){
        System.err.print( url + e);
    }
}