今日做蝌蚪支付的系统,在Windows上运行一切正常,但是发布到Linux下却一直错误,找了近俩小时,发现原来还是路径的问题
废话不多说,看源码
public static String getRootPath(){ String path = FileUtil.class.getResource("/../../").toString(); try { path = java.net.URLDecoder.decode(path, "UTF-8"); path = path.replace("file:/", ""); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return path; } |
这段用于获取Tomcat发布的根目录,如我的Tomcat装在D盘D:\Program Files\Apache Software Foundation下面如下所示
D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT
FileUtil.class.getResource("/../../").toString()
获取的路径为
file:/D:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/ROOT
于是去掉前面的"file:/"得到真实的路径。
但是在Linux下,如果我安装的目录是在/usr/local下面,于是
FileUtil.class.getResource("/../../").toString()
获取的路径为file:/usr/local/tomacat/webapps/ROOT
去掉前面的file:/就成了usr/local/tomacat/webapps/ROOT
但是调用这段代码的程序文件显然不是在根目录,于是找不到目录,就新建对应的目录,但是文件的内容永远是找不到的!
奋战俩个小时 终于找到了原因,于是修改代码如下
public static String getRootPath(){ String path = FileUtil.class.getResource("/../../").toString(); try { path = java.net.URLDecoder.decode(path, "UTF-8"); path = path.replace("file:", ""); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return path; } |
这样就完全正确了,现在终于明白Apache许多代码获取路径和分隔符等都用不同的方法,以前还嬉笑Apache多此一举,现在终于也吃到苦头了,希望以后写程序的人多注意系统的差异性,写下次深刻教训,大家共勉!
评论