Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用此.getClass().getResource(字符串)?_Java - Fatal编程技术网

Java 如何使用此.getClass().getResource(字符串)?

Java 如何使用此.getClass().getResource(字符串)?,java,Java,我不明白这段代码的错误是什么 public void run(String url) { try { FileInputStream file; file = new FileInputStream(this.getClass().getResource(url)); Player p = new Player(file); p.play(); }catch(Exce

我不明白这段代码的错误是什么

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)的构造函数”。为什么会发生这种情况?

使用getResourceAsStream更简单

InputStream in = getClass().getResourceAsStream(url);
Player p = new Player(file);
使用:

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

    • FileInputStream构造函数的参数是File,String。。。(请参阅),但Class.getResource返回URL(请参阅),而不是文件或字符串。 尝试使用

      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);
          }
      }
      

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

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

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

      ,因为没有以URL为参数的FileInputStream构造函数。非常感谢。它起作用了。但是你知道我不明白我们什么时候,怎样,在哪里使用它。这对我来说非常复杂。@Tushar:什么是复杂的?让我知道,我将尝试向您解释。我只想知道getClass().getClassLoader().getResourceAsStream(文件路径)行是如何运行的;可以工作。@Tushar:getClass().getClassLoader()查找编写此代码的当前类的类加载器。类加载器知道从何处加载类文件。此文件需要放置在同一位置。getResourceAsStream从该位置读取文件并返回输入流。如果您需要更多的解释,请告诉我。当然,如果您提供更多的解释,我将非常满意。方法类.getResource(String)返回URL,而文件构造函数的参数是String,或URI。。。(见附件)。方法返回表示URL的URI对象。您可以在和中看到URI和URL之间的不同