如何在jar文件中读取媒体文件(音频文件,而不是文本文件)?

时间:2012-03-31 01:57:12

标签: java audio jar wav

    Media.jar
    |--gmor.wav
    +--some.txt

下面的代码无法获取输入流,并抛出 java.lang.NullPointerException。
     input = JarFileRead.class.getClassLoader()。getResourceAsStream(“some.txt”);可以工作。

[代码]

import java.io.*;
public class JarFileRead
{
public static InputStream input = null;
public JarFileRead()
   {
       try
       {
           input = JarFileRead.class.getClassLoader().getResourceAsStream("gmor.wav");

           while(input.read()!=-1)
           {

               System.out.print(input.read());
           }
           input.close();
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
   }
public static void main(String [] args)
{
   new JarFileRead();
}

}

[/代码]

1 个答案:

答案 0 :(得分:2)

getResourceAsStream方法如果找不到您要求的资源,则返回null。您的代码不会检查null,这是您的NPE的原因。

所以解决方案是:

  • 检查文件是否确实存在于JAR中,该文件应存在于该位置。

  • 将路径名更改为您使用该方法的方式。


注意:如果您尝试将文件命名为JarFileRead,则需要执行此操作:

JarFileRead.class.getResourceAsStream("gmor.wav");

您当前的方式应该解析相对于命名空间根的相对路径;即它相当于要求"/gmor.wav"。但这就是你的意思,写起来更简单,更清晰:

JarFileRead.class.getResourceAsStream("/gmor.wav");