在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. HDOJ 4424 Conquer a New Region

    并检查集合 侧降序,每增加一个侧面应该推断,其中基本建设方..... Conquer a New Region Time Limit: 8000/4000 MS (Java/Others)    Me ...

  2. 【Android进阶】使用第三方平台ShareSDK实现新浪微博的一键分享功能

    在公司最近的一个项目中,需要实现一键分享功能,在这里我使用的是第三方平台ShareSDK,将使用经验与大家分享 先看效果图 主界面 分享界面 由于第一次使用,所以需要先进行新浪授权,授权界面 分享结果 ...

  3. 恶意软件&quot;跨平台&quot; 小心钱包很受伤

    什么是跨平台攻击? 举例来说.就像网络诈骗犯为了避开电子商务平台的监控.会在微博上发消息.百度上撒网,腾讯上联系,最后在淘宝上交易.这样的跨平台操作的模式会大大添加犯罪过程监控和取证的难度.而跨平台攻 ...

  4. Iterator、Iterable接口的使用及详解

    Java集合类库将集合的接口与实现分离.同样的接口,可以有不同的实现. Java集合类的基本接口是Collection接口.而Collection接口必须实现Iterator接口. 以下图表示集合框架 ...

  5. Ubuntu14.04设备JDK

    1.设备JDK 打开命令直插式工具.输入以下三个命令: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo ap ...

  6. 解决 Error:No suitable device found: no device found for connection &quot;System eth0&quot;

    一.底 我们安装在虚拟机,.想模拟几台server.这时就想直接复制已经有的安装好的虚拟机.这样比較省事,不要在反复的安装虚拟机并配置JAVA环境,省掉做相同的事情,这时直接复制,这样之前配置的JAV ...

  7. UVA 11464 Even Parity(递归枚举)

    11464 - Even Parity Time limit: 3.000 seconds We have a grid of size N x N. Each cell of the grid in ...

  8. Vim常见操作汇总

    1.跳到文本的最后一行:按“G”,即“shift+g”2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”.3.跳到第一行的第一个字符:先按两次“g”,4 ...

  9. CloudFoundry.yml修订

    --- name: CFRELEASE02 director_uuid: fdd46e30-f2c5-41dc-9662-0976fdac5716 releases: - name: cf versi ...

  10. HDU 1074 Doing Homework(像缩进DP)

    Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of h ...