在JSP中,页面链接是使用web路径的,但如果JavaBean要访问本地文件读取配置信息的话,是需要文件的本地路径的。如果你在写 Bean的时候直接将本地路径写进去,那网站的路径就不能变化,丧失可移植性。下面就提供一个比较笨的方法,实现网站文件读取的路径无 关,

要做到路径无关,把整个网站文件夹拷到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访问本地文件实现路径无关实现方法的更多相关文章

  1. FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)

    开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发中的烦恼,因此,我对普通的C#文件操作做了一次总结,问题大部 ...

  2. 使用javascript来访问本地文件夹

    常用的.net 的aspx文件由于运行在服务器端,并不具有访问用户本地文件夹的权限,导致类似于<a href="file:///d:/backup" > open fo ...

  3. 头疼:为什么chrome不能访问本地文件(带--disable-web-security --allow-file-access-from-files )

    如题,寻求帮助! chrome 带参数启动 --disable-web-security  --allow-file-access-from-files 照理应该可以加载本地文件,找遍google和英 ...

  4. apache之访问本地文件,绑定域名

    1.打开文件 C:\Windows\System32\drivers\etc\hosts,在文件末尾加上下面代码: 127.0.0.1 www.wangdongxue.com 2.打开Apache的配 ...

  5. node静态资源服务器的搭建----访问本地文件夹(搭建可访问静态文件的服务器)

    我们的目标是实现一个可访问静态文件的服务器,即可以在浏览器访问文件夹和文件,通过点击来查看文件. 1.先创建一个文件夹anydoor,然后在该文件夹里npm init一个package.json文件, ...

  6. vue访问本地文件404

    用了vue cli3.0用axios调用本地json数据一直报404,找了半天郁闷,最后发现原因是,vue cli3.0 public 文件夹才是静态资源文件,问题解决,记录一下,以后不再踩坑.

  7. “文件XXX正由另一进程使用,因此该进程无法访问此文件”

    文件xxx正在由另一进城使用,这种问题出现有一种原因: 就是同一个线程重打开文件,但是没有关闭的情况下,再次读取的时候抛出异常. 如下的代码为错误代码:

  8. nginx安装及配置访问本地文件

    第一步安装nginx windows可以直接去官网下载,解压就能用 http://nginx.org/en/download.html ubuntu用命令行 sudo apt-get install ...

  9. 无法将文件xxx复制到xxx文件xxx正由另一进程使用,因此该进程无法访问此文件

    对于VS2017,可以这样处理,开始——>运行——>tskill msbuild,然后重新生成即可.

随机推荐

  1. iOS 9 新特性

    这篇文章介绍了iOS9开发相关的简介,现在发布的设备都会搭载iOS9.这篇文章也列出了详细描述新特性的文章. iPad多线程增强 iOS9使用Slider Over, Split View, Pict ...

  2. MVC5+EF6 入门完整教程 总目录

    本系列文章会从一个主干开始,逐渐深入,初步规划30篇.初级10篇,中级10篇,综合项目实战10篇 初级10篇 MVC5+EF6 入门完整教程10:多对多关联表更新&使用原生SQL@201505 ...

  3. 【转】JTree调用UpdateUI()抛空指针

    最近在做东西时发现,当在线程里面刷新JTree时,有时会出现空指针错误,在网上查了很久,终于发现以下解决方法: JTree中调用UpdateUI()报以下错误 java.lang.NullPointe ...

  4. java IdentityHashMap 与HashMap

    这两个map的主要区别在于,比较key值什么时候: IdentityHashMap我觉得当k1 == k2 时刻key值一样的 HaspMap觉得k1 == null ? k2 == null:k1. ...

  5. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od(转)

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

  6. 使用API创建AR 贷项通知单

    DECLARE --8000000063 l_dummy varchar2(240); l_customer_trx_id ra_customer_trx.customer_trx_id%type; ...

  7. poj3281-Dining ,最大流量,内置图

    id=3281">点击打开链接 分析: 求最大流 建图: 拆点 牛拆成左边与食物相连的左牛 和 右边与饮料相连的右牛 1.s->食物 连边 2.食物->左牛 3.左牛-&g ...

  8. 6-06. 理性任务调度(25)(拓扑排序啊 ZJU_PAT)

    主题链接:http://pat.zju.edu.cn/contests/ds/6-06 假定一个project项目由一组子任务构成,子任务之间有的能够并行运行.有的必须在完毕了其他一些子任务后才干运行 ...

  9. iOS 执行ScrollView在空白空间-解

    iOS7 中间UIViewControllers配置automaticallyAdjustsScrollViewInsets.假设YES.scrollview它会根据status bar, navig ...

  10. HDU 3081 Marriage Match II(二分法+最大流量)

    HDU 3081 Marriage Match II pid=3081" target="_blank" style="">题目链接 题意:n个 ...