浅谈java获取文件路径

#Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
   1,在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。 如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。
    ## ServletContext对象:
        1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
        2. 获取:
            1. 通过request对象获取
                request.getServletContext();
            2. 通过HttpServlet获取
                this.getServletContext();
            3. 范围
                ServletContext对象范围:所有用户所有请求的数据    
   用ServletContext获取文件的真实(服务器)路径
            1. 方法:String getRealPath(String path)  
                 String b = context.getRealPath("/b.txt");//web目录下资源访问
                 System.out.println(b);
        
                String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
                System.out.println(c);
        
                String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
                System.out.println(a);

#2,如果在类中取不到ServletContext时, 有两种方式可以做到:
    1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录,这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。    
      
    #很重要2.1 通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录) 
           InputStream is=TestAction.class.getClassLoader().getResourceAsStream("druid.properties"); (druid.properties文件的路径为 项目名\src\druid.properties类TestAction所在包的第一级目录位于src目录下) 
            这种方法获取的是InputStream类型的数据,可以再jdbc中使用例子:
            Properties properties=new Properties();
            InputStream is=JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            System.out.println(is);
            properties.load(is);
    #很重要2.2 类名.class.getClass().getResource("要加载的文件").getPath())  例如:    
            File file=new File(tsstpath.class.getClass().getResource("/d.txt").getPath());
               System.out.println(file);                                    //输出  F:\java-10\day11\out\production\Fiiter\d.txt  我的文件在得src下的路径
            BufferedReader bf=new BufferedReader(new FileReader(file));    
             List<String> list=new ArrayList<String>();
            while ((str2=bf.readLine())!=null){
                    list.add(str2);
             }
            System.out.println(list);                                   //文件里面的数据
               bf.close();
    #很重要2.3  类名.class.getClassLoader().getResource("d.txt").getPath();
            String path = tsstpath.class.getClassLoader().getResource("d.txt").getPath();
            System.out.println(path);                                     //F:\java-10\day11\out\production\Fiiter\d.txt
            这个直接返回String 类型的文件路径 用起来更方便 
    

    2.其次就是servlet中的思路 带*的重点了解
     request功能:
        1. 获取请求消息数据
            1. (*)获取虚拟目录:/day14
                * String getContextPath()
            2. 获取Servlet路径: /demo1
                * String getServletPath()
            3. (*)获取请求URI:/day14/demo1
                * String getRequestURI():        /day14/demo1
                * StringBuffer getRequestURL()  :http://localhost/day14/demo1
                * URL:统一资源定位符 : http://localhost/day14/demo1    中华人民共和国
                * URI:统一资源标识符 : /day14/demo1                    共和国
            
            
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值