JAVA路径获取总结

来源:互联网 发布:斧声烛影 知乎 编辑:程序博客网 时间:2024/05/16 16:09
一、获得自身路径
1.获得当前项目路径
     System.getProperty("user.dir");
2.File类获得路径
     以File path = new File("testdir/test.txt")为例
     File.class.getPath();//返回"testdir/test.txt" ;返回new File()内所写的路径
     File.class.getCanonicalPath()//返回"projectPath/testdir/test.txt" ; new File()返回项目路径, new File(".")返回当前文件夹,new File("..")返回上一级文件夹路径, 可以使用"../../.."返回更多层级的上级文件夹
     File.class.getAbsolutePath()//返回"projectPath/testdir/test.txt" ;  返回项目路径+new File()内的路径
3.在servlet获得路径
     以"http://id/project/test"
     request.getRequestURI(); //返回相对的request申请路径"project/test"
     request.getContextPath();//返回工程路径"project"
     request.getServletPath();//返回"/test"
     request.getRequestURL();//返回页面栏地址"http://id/project/test"
     request.getSession().getSevletContext.getRealPath("");// 返回当前项目所在路径"projectPath"
4.在类中获得路径
    this.getClass().getResource("Class.class").getPath();//返回class路径
    this.getClass().getResource("").getPath();//返回当前class路径
5.spring获取资源路径
     resource/template/word/memberActivity.docx;
     tmpWord = new ClassPathResource("template/word/memberActivity.docx").getFile().getPath();
6.获得其他文件的路径
    推荐http://www.cnblogs.com/leehongee/p/3324062.html

注:Class.class为类对象。
实际上java的每个类被编译成.class文件的时候,java虚拟机(叫jvm)会自动为这个类生成一个类对象,这个对象保存了这个类的所有信息(成员变量,方法,构造器等),以后这个类要想实例化(也就是创建类的实例或创建类的对象)那么都要以这个class对象为蓝图(或模版)来创建这个类的实例。 例如 class<?> c=Class.forName("com.pojo.User"); c就是User的类对象,而 User u=new User();这个u就是以c为模版创建的,其实就相当于u=c.newInstance();
注:在project中,相对路径的根目录都是project的根文件夹路径。
如 File file = new File("test.txt")//file的路径为"projectPath/test.txt",file可以是文件也可以是文件夹
推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法

 二、读取其它文件路径

java 使用相对路径读取文件

1.java project环境,使用java.io用相对路径读取文件的例子:
*目录结构:
DecisionTree
           |___src
                |___com.decisiontree.SamplesReader.java
           |___resource
                |___train.txt,test.txt
*SamplesReader.java:
String filepath="resource/train.txt";//注意filepath的内容;
File file=new File(filepath);
……

*我们留意filepath的内容,java.io默认定位到当前用户目录("user.dir")下,即:工程根目

录"D:\DecisionTree"下,因此,此时的相对路径(以user.dir为基路径的路径)为"resource/train.txt"

。这样,JVM就可以根据"user.dir"与"resource/train.txt"得到完整的路径(即绝对路

径)"D:\DecisionTree\resource\train.txt",从来找到train.txt文件。

*注意:相对路径的起始处无斜杆"/";例如:
filepath="resource/train.txt";
而不是filepath="/resource/train.txt"; //error!
2、javaEE环境,使用Classloader用相对路径读取xml的例子:

java使用相对路径读取xml文件:
一、xml文件一般的存放位置有三个:
1.放在WEB-INF下;
2.xml文件放在/WEB-INF/classes目录下或classpath的jar包中;
3.放在与解析它的java类同一个包中,不一定是classpath;

二、相对应的两种使用相对路径的读取方法:

方法一:(未验证)
将xml文件放在WEB-INF目录下,然后
程序代码:
InputStream is=getServletContext().getResourceAsStream( "/WEB-INF/xmlfile.xml" );

方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态

方法getSystemResourceAsStream(String s)读取;
程序代码:
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);

方法三:xml在随意某个包路径下:
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
ClassLoader classLoader=HotspotXmlParser.class.getClassLoader();
InputStream in=classLoader.getResourceAsStream(s_xmlpath);
0 0
原创粉丝点击