文章目录
问题出现
该代码是一个文件下载的功能,代码在linux服务器上能够运行,但是检出到本地(windows)后报错。错误的原因是文件流没有获取到数据源,存在空指针异常。
从上面的分析,大概就能推断,问题的原因出现该代码无法进行跨平台执行。
这里贴两段出现问题的代码,就是简单的路径获取,没有什么业务相关的部分
String xmlPath = (new StringBuilder(128)).append(this.getClass()
.getResource("/").getPath()).append("uploadConfig")
.append(File.separator).append("upload.xml").toString();//获取xml的路径
String modelPath = request.getSession().getServletContext().getRealPath(File.separator+"excel"+File.separator+modelName);
上面的逻辑就是获取到xml的路径,然后使用XML解析对象拿到modelName属性,这个属性的值是一个Excel文件的简单名称,然后拿到这个Excel文件的服务器真实路径。
可以看到,上面的代码其实考虑到了跨平台性,因为使用了File.sparator,该常量在unix系统会被识别为/,而在window系统会被识别为\\ 。
上面的问题主要出现在getResource上。
getResource原理
public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if