zoukankan      html  css  js  c++  java
  • (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法

        在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().然后用Stringsubstring()方法就可以获得文件名了。

                    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/

  • 相关阅读:
    IIS笔记-Application Request Route(ARR)
    UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法
    Electron/Nodejs开发笔记-功能问题记录及指南
    Net笔记-EF/EF Core/Dapper等ORM开发记录
    C/C++和C#混合编程笔记-DLL调用与IPC等mixed问题记录
    CImg笔记
    Net/Net Core笔记 WebAPI/MVC一些bug和处理
    Net-Net Core 3.0 gRPC 开发不完全笔记
    UE4-PixelStreaming不完全开发笔记
    UE4-开发中遇到的问题和处理方法
  • 原文地址:https://www.cnblogs.com/redlight/p/3165239.html
Copyright © 2011-2022 走看看