JavaBean访问本地文件实现路径无关
2007-05-31 14:24
295 查看
在JSP中,页面链接是使用web路径的,但如果JavaBean要访问本地文件读取配置信息的话,是需要文件的本地路径的。如果你在写Bean的时候直接将本地路径写进去,那网站的路径就不能变化,丧失可移植性。也许有人说可以将路径写入配置文件中,我是新手,不清楚配置文件的读取机制。在网上搜索的时候,发现很多新手也有同样的问题,Bean访问本地文件需要本地的绝对路径。下面就提供一个比较笨的方法,实现网站文件读取的路径无关,如果各位技术届大佬有好的方法和技术的话,回帖里给我们这些新手点帮助,小第在此谢过。
本人刚刚本科毕业,毕业设计是用JSP来做的一个项目,该项目中需要访问本地的一些文件,我们当然可以直接写绝对路径,但答辩调试的话,如果web服务器安装的路径和你的不一样的话,就不可能调试成功,动手改程序就显得太低能了。所以,要做到路径无关,把整个网站文件夹拷到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();
String packageName = this.getClass().getPackage().getName();
String classFileName = className.subString(packageName.length()+1)+".class";
String classFilePath = this.getClass().getResource(classFileName).toString();
String filePath = classFilePath.subString(0,classFilePath.length()-className.length()-14));
filePath为父目录,用的时候filePath+"相对路径"+"文件名".本文出自 “立子” 博客,请务必保留此出处http://leaze.blog.51cto.com/83088/28662
本人刚刚本科毕业,毕业设计是用JSP来做的一个项目,该项目中需要访问本地的一些文件,我们当然可以直接写绝对路径,但答辩调试的话,如果web服务器安装的路径和你的不一样的话,就不可能调试成功,动手改程序就显得太低能了。所以,要做到路径无关,把整个网站文件夹拷到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();
String packageName = this.getClass().getPackage().getName();
String classFileName = className.subString(packageName.length()+1)+".class";
String classFilePath = this.getClass().getResource(classFileName).toString();
String filePath = classFilePath.subString(0,classFilePath.length()-className.length()-14));
filePath为父目录,用的时候filePath+"相对路径"+"文件名".本文出自 “立子” 博客,请务必保留此出处http://leaze.blog.51cto.com/83088/28662
相关文章推荐
- javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- JavaBean访问本地文件实现路径无关
- JAVA通过访问页面中的URL实现Http文件下载到本地
- asp.net实现上传文件显示本地绝对路径的实例代码
- inputfile(bootstrap)实现文件上传保存本地路径
- python通过本地保存的cookie文件实现登录并访问相关网页
- $.ajax({ }) 访问本地json文件 url 写相对路径或者api 即可
- IOS开发(7)WKWebView加载本地HTML、CSS、JS文件JS(解决html内访问其他资源路径问题)
- JAVA通过访问页面中的URL实现Http文件下载到本地
- C#实现对本地文件的访问,获取本地文件的地址
- html5加js实现本地文件读取和写入并获取本地文件路径
- FileUpload读不到指定本地路径名,选择的本地路径中间被/fakepath/代替的解决方案,并实现文件类型筛选
- .NET配置本地数据库文件的密码(并实现DataSet访问数据表数据)
- 如何在web端实现本地文件的访问功能
- asp.net实现上传文件显示本地绝对路径的实例代码
- HTML5 实现一个访问本地文件的实例
- 在j2me中如何实现获取本地后缀名为mp3文件的名称及路径
- tomcat 访问本地C,D盘等文件配置