尝试在Eclipse中使用ressource时出现NullPointerException

时间:2016-11-29 01:20:25

标签: java nullpointerexception

我正为我的项目制作一个可运行的jar文件。

代码

public class StandingsCreationHelper
{
    private static final String TEMPLATE_FILENAME = "Standings_Template.xls";

public static void createStandingsFile() throws Exception
{
    StandingsCreationHelper sch = new StandingsCreationHelper();

    // Get the file from the resources folder
    File templateFile = new File("TemporaryPlaceHolderExcelFile.xls");
    OutputStream outputStream = new FileOutputStream(templateFile);
    IOUtils.copy(sch.getFile(TEMPLATE_FILENAME), outputStream);
    outputStream.close();
}
}

public InputStream getFile(String fileName)
{
    return this.getClass().getClassLoader().getResourceAsStream(fileName);
}

public static void main(String[] args) throws Exception
{
    createStandingsFile();
}

项目结构

enter image description here

问题

当我将代码打包在runnable jar中时,我的程序将毫无问题地执行。但是,如果我从IDE(Eclipse)调用main方法,则会收到以下错误消息,就好像无法找到资源一样:

线程“main”java.lang.NullPointerException中的异常     在org.apache.poi.util.IOUtils.copy(IOUtils.java:182)     at standings.StandingsCreationHelper.createStandingsFile(StandingsCreationHelper.java:153)     at standings.StandingsCreationHelper.main(StandingsCreationHelper.java:222)

感谢您提前寻求帮助!

1 个答案:

答案 0 :(得分:2)

您正在使用getClassLoader(),它需要文件的绝对路径。

变化:

public InputStream getFile(String fileName)
{
    return this.getClass().getClassLoader().getResourceAsStream(fileName);
}

public InputStream getFile(String fileName)
{
    return this.getClass().getResourceAsStream(fileName);
}

现在你可以使用从你的班级看到的相对路径。不要忘记将TEMPLATE_FILENAME更改为"resources/Standings_Template.xls",如评论中所述。