我正为我的项目制作一个可运行的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();
}
项目结构
问题
当我将代码打包在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)
感谢您提前寻求帮助!
答案 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"
,如评论中所述。