JAVA开发中文件路径汇总

1、文件是demo.xml,位置在com.xxx.app包下,你可以用Class.getResourceAsStream("com/xxx/app/demo.xml") 
所有classpath可访问的路径都可以用这种方式
 
2、file.getAbsolutePath()是获取文件当前的绝对路径,如果在Linux下,采取file.getAbsolutePath().replaceAll("\\\\", "/")后可构造java.net.URL对象:URL url = new URL("file:" + file.getAbsolutePath().replaceAll("\\\\", "/"))
 
3、想知道class运行的当前目录,可使用System.out.println(new File(".").getAbsolutePath())获得,默认情况下new File("/")代表的目录为:System.getProperty("user.dir")
 
4、相对路径表示说明:
  • FileInputStream fis=new FileInputStream("images/"+id+".jpg"),表示当前运行的.class目录下有一个images目录,里面有特定的jpg图片
  • FileInputStream fis=new FileInputStream("../webapps\\axis2\\WEB-INF/pojo/images/"+id+".jpg"),../表示当前目录的上一级目录
  • new FileInputStream("./mysource.properties"),这样写的路径是在当前jar包退出路径下有一个文件名为mysource.properties这样的配置文件
  • 在Servlet中,"/"代表Web应用的根目录
5、JSP中获得当前应用的相对路径和绝对路径
  • 根目录所对应的绝对路径:request.getRequestURI()
  • 文件的绝对路径  :application.getRealPath(request.getRequestURI())
  • 当前web应用的绝对路径 :application.getRealPath("/")
  • 取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()
6、Servlet中获得当前应用的相对路径和绝对路径
  •     根目录所对应的绝对路径:request.getServletPath();
  •     文件的绝对路径request.getSession().getServletContext().getRealPath(request.getRequestURI())
  •     当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/")   
    (ServletContext对象获得几种方式:    
    javax.servlet.()    
    javax.servlet.jsp.PageContext.getServletContext()    
    javax.servlet.ServletConfig.getServletContext()    
    )
 
测试代码:    
    import java.io.File;
    
    public class FileTest {
    
    public static void main(String[] args) throws Exception {
    
      System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
    
      System.out.println(FileTest.class.getClassLoader().getResource(""));
    
      System.out.println(ClassLoader.getSystemResource(""));
    
      System.out.println(FileTest.class.getResource(""));
    
      System.out.println(FileTest.class.getResource("/")); //Class文件所在路径
    
      System.out.println(new File("/").getAbsolutePath());
    
      System.out.println(System.getProperty("user.dir"));    
     }    
    }
 
获取Java程序运行的路径 | 获取当前jar包的路径
public class MyPath {
 
    public static String getProjectPath() { 
       java.net.URL url = MyPath.class.getProtectionDomain().getCodeSource().getLocation();
 
       String filePath = null;
       try {
           filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");
       } catch (Exception e) {
           e.printStackTrace();
       }
 
       if (filePath.endsWith(".jar"))
          filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
 
        java.io.File file = new java.io.File(filePath);
        filePath = file.getAbsolutePath();
        return filePath;
  }   
 
    public static String getRealPath() {
        String realPath = MyPath.class.getClassLoader().getResource("").getFile();
        java.io.File file = new java.io.File(realPath);
        realPath = file.getAbsolutePath();
 
        try {
           realPath = java.net.URLDecoder.decode(realPath, "utf-8");
        } catch (Exception e) {
           e.printStackTrace();
       }
       return realPath;
    }   
 
    public static String getAppPath(Class<?> cls){ 
       //检查用户传入的参数是否为空 
        if(cls==null)  
        throw new java.lang.IllegalArgumentException("参数不能为空!");       
 
        ClassLoader loader=cls.getClassLoader(); 
        //获得类的全名,包括包名 
        String clsName=cls.getName();
        //此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 
        if(clsName.startsWith("java.")||clsName.startsWith("javax.")) {
        throw new java.lang.IllegalArgumentException("不要传送系统类!");
        }
 
        //将类的class文件全名改为路径形式
        String clsPath= clsName.replace(".", "/")+".class";
        //调用ClassLoader的getResource方法,传入包含路径信息的类文件名 
        java.net.URL url =loader.getResource(clsPath); 
        //从URL对象中获取路径信息 
        String realPath=url.getPath(); 
 
        //去掉路径信息中的协议名"file:" 
        int pos=realPath.indexOf("file:"); 
        if(pos>-1) {
        realPath=realPath.substring(pos+5); 
        }
 
        //去掉路径信息最后包含类文件信息的部分,得到类所在的路径 
        pos=realPath.indexOf(clsPath); 
        realPath=realPath.substring(0,pos-1); 
        //如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 
        if(realPath.endsWith("!")) {
        realPath=realPath.substring(0,realPath.lastIndexOf("/"));
        }
        java.io.File file = new java.io.File(realPath);
        realPath = file.getAbsolutePath();      
 
        try{ 
        realPath=java.net.URLDecoder.decode(realPath,"utf-8"); 
        }catch(Exception e){
        throw new RuntimeException(e);
        } 
        return realPath; 
    }//getAppPath定义结束 
 
使用Jar包,在Tomcat的运行结果如下:
 
ProjectPath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\lib
 
RealPath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\classes
 
Apppath: D:\J2EE\Tomcat 6.0\webapps\MyService1WebP\WEB-INF\classes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值