(转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
要做到路径无关,把整个网站文件夹拷到web服务器目录中就能直接运行 才是硬道理。废话少说,切入正题。
JSP网站中,配置文件,JavaBean,其它文件,都是存储在WEB-INF文件夹中的。
我们可以将获取文件父目录的代码放到构造函数里,这样在实例化类的时候就获取了文件父目录的路径,需要访问文件时,就可以直接在该路径后面加上文件的相对路径。
1. 获取当前类编译后的文件名(xxxxx.class)
首先用getClass()方法获取该类的类型,然后调用getName()方法获取类名。如果你的类名叫MyClass,该类属于bean包,那么 this.getClass().getName()的结果就是bean.MyClass。而这个类编译后,应该叫MyClass.class,所以,我们必须剪掉包名和那个点。这时需要用到getPackage()获取包类型,然后用getName()获取包名。这样就是:
this.getClass().getPackage().getName().然后用String的substring()方法就可以获得文件名了。
String className = this.getClass().getName();
String packageName = this.getClass().getPackage().getName();
String classFileName = className.substring(packageName.length()+1)+".class";
这3行代码下来,就取得了类的文件名:MyClass.class
2. 接下来是获取该类文件的路径
这里要用到getResource()方法,该方法是获取类文件的路径。该方法返回的是URI类型的,我们要转化成String类型,结果为“file:///D:/TomCat/......”格式的。
String classFilePath = this.getClass().getResource(classFileName).toString();
3. 最后获取父目录的路径
前面已经说了,我们的文件一般是放在WEB-INF文件夹下的,而JavaBean的类文件放在WEB-INF/classes/下,而我们的classFilePath的结果为file:///D:/.../WEB-INF/classes/bean/MyClass.class,我们需要把WEB-INF后面的内容去掉,同样用substring()方法。
String filePath = classFilePath.substring(0,classFilePath.length()-className.length()-14));
className的值是bean.MyClass,"classes/"+".class"共14个字符,这条语句下来,就是父目录的路径了,结果为"file:///D:/.../WEB-INF/"。这个目录不能直接拿来用,结果也是windows上的路径,在UNIX,LINUX中就不同了,照顾到平台无关性,我们需要这样做:
URI uri = URI(filePath+"文件相对路径");
File file1 = File(uri);
好了,这样就做到了路径无关,把代码整理放下面,方便查看。
String className = this.getClass().getName();//得到”bean.MyClass”
String packageName = this.getClass().getPackage().getName();//得到“bean“
String classFileName = className.substring(packageName.length()+1)+".class";//得到“MyClass.class“
String classFilePath = this.getClass().getResource(classFileName).toString();//得到“file:///D:/.../WEB-INF/classes/bean/MyClass.class “
String filePath = classFilePath.substring(0,(classFilePath.length()-className.length()-14));//得到“file:///D:/.../WEB-INF/"
URL url =new URL(filePath); //得到“file:///D:/.../WEB-INF/"
String classpath=url.toString().substring(6); //去掉file:///
最终返回“C:/tomcat5/webapps/ROOT/WEB-INF/”
(转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法的更多相关文章
- FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)
开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发中的烦恼,因此,我对普通的C#文件操作做了一次总结,问题大部 ...
- 使用javascript来访问本地文件夹
常用的.net 的aspx文件由于运行在服务器端,并不具有访问用户本地文件夹的权限,导致类似于<a href="file:///d:/backup" > open fo ...
- 头疼:为什么chrome不能访问本地文件(带--disable-web-security --allow-file-access-from-files )
如题,寻求帮助! chrome 带参数启动 --disable-web-security --allow-file-access-from-files 照理应该可以加载本地文件,找遍google和英 ...
- apache之访问本地文件,绑定域名
1.打开文件 C:\Windows\System32\drivers\etc\hosts,在文件末尾加上下面代码: 127.0.0.1 www.wangdongxue.com 2.打开Apache的配 ...
- node静态资源服务器的搭建----访问本地文件夹(搭建可访问静态文件的服务器)
我们的目标是实现一个可访问静态文件的服务器,即可以在浏览器访问文件夹和文件,通过点击来查看文件. 1.先创建一个文件夹anydoor,然后在该文件夹里npm init一个package.json文件, ...
- vue访问本地文件404
用了vue cli3.0用axios调用本地json数据一直报404,找了半天郁闷,最后发现原因是,vue cli3.0 public 文件夹才是静态资源文件,问题解决,记录一下,以后不再踩坑.
- “文件XXX正由另一进程使用,因此该进程无法访问此文件”
文件xxx正在由另一进城使用,这种问题出现有一种原因: 就是同一个线程重打开文件,但是没有关闭的情况下,再次读取的时候抛出异常. 如下的代码为错误代码:
- nginx安装及配置访问本地文件
第一步安装nginx windows可以直接去官网下载,解压就能用 http://nginx.org/en/download.html ubuntu用命令行 sudo apt-get install ...
- 无法将文件xxx复制到xxx文件xxx正由另一进程使用,因此该进程无法访问此文件
对于VS2017,可以这样处理,开始——>运行——>tskill msbuild,然后重新生成即可.
随机推荐
- 集差集 哈希表 比较数据库的照片和server画面上,将server垃圾上的图片删除
SSH 骨架code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp( ...
- SRM 620 D2L3: RandomGraph, dp
称号:http://community.topcoder.com/stat? c=problem_statement&pm=13143&rd=15853 參考:http://apps. ...
- JAVA 公众微信的开放源码项目管理合作伙伴招募的版本号
大家好: jeecg开源社区.现在正在进行"JAVA 开放源码的版本号项目微信公共账号"工作,有兴趣的朋友一起參与. 截止时间:20140510 採用技术: 1. JE ...
- 【Bootstrap】自己主动去适应PC、平面、手机Bootstrap网格系统
酒吧格英语作为一门系统"grid systems",也有人翻译成"网络格系统".使用固定格子设计布局,其风格整齐而简洁,在二战结束后人气,流风格之中的一个. 1 ...
- Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc->wait
本文參考<Android系统源代码情景分析>,作者罗升阳 一.service manager代码: -/Android/frameworks/base/cmd/service ...
- PHP redis操作类 个人总结
<pre name="code" class="php"><span style="font-size:18px;"> ...
- ignore,neglect,omit,overlook
一:简介——ignore :通常指有意不顾,或不理显而易见的事物.neglect :侧重指有意的忽略或忽视,也可指粗心与疏忽.omit :指有意或无意地忘记做某事,也指删去被视作不重要.不合意的东西. ...
- IndexReader已解决的问题
设计和实时搜索的发展,IndexReader饮酒数成为0当调用doClose,和SegmentReader再有一个addCoreClosedListener控制的方法SegmentCoreReader ...
- android tips—NumberPicker,DataPicker,TimePicker样式改动
在使用NumberPicker.DataPicker,TimePicker这几个控件时,非常easy出现例如以下这个界面 可是我们想要的却是以下图示的结果 改动Application.activity ...
- React JS高速新手教程
翻译至官方文档<Tutorial>http://facebook.github.io/react/docs/tutorial.html 转载请注明出处:http://blog.csdn.n ...