精华内容
下载资源
问答
  • java路径

    千次阅读 2009-11-05 10:16:00
    /** * @description java 路径 * @author swandragon * @date Nov 5, 2009 */public class FilePath{ /** * 开发中不要使用System.getProperty("user.dir")获取当前用户目录的相对路径 * 也尽可能不要使

     

    展开全文
  • MAC JDK默认安装路径 JAVA路径

    万次阅读 多人点赞 2016-09-02 07:55:38
    MAC JDK默认安装路径 JAVA路径



    打开终端,执行     /usr/libexec/java_home -V



    MacBook-Air:~ eng$ /usr/libexec/java_home -V
    Matching Java Virtual Machines (4):
        1.8.0_101, x86_64:  "Java SE 8"     /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
        1.7.0_79, x86_64:   "Java SE 7"     /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
        1.6.0_65-b14-466.1, x86_64: "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
        1.6.0_65-b14-466.1, i386:   "Java SE 6"     /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home



    默认JDK1.6(Apple自带JDK)路径:   /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

    默认JDK1.7、1.8(Oracle) Home :  /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home




    展开全文
  • Java路径问题最终解决方案 —可定位所有资源的相对路径寻址前言

      

                                                Java路径问题最终解决方案
                                                                                                               可定位所有资源的相对路径寻址
     
     
     
    前言
    Java的路径问题,非常难搞。最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题。
    我编写了一个方法,比ClassLoader.getResource(String 相对路径)方法的能力更强。它可以接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源。这样,我们就可以使用相对于classpath的路径,定位所有位置的资源!
     
    Java路径
    Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种:
    一、URI形式的绝对资源路径
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
    URL是URI的特例。URL的前缀/协议,必须是Java认识的。URL可以打开资源,而URI则不行。
    URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可!
     
    二、本地系统的绝对路径
    D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
    Java.io包中的类,需要使用这种形式的参数。
    但是,它们一般也提供了URI类型的参数,而URI类型的参数,接受的是URI样式的String。因此,通过URI转换,还是可以把URI样式的绝对路径用在java.io包中的类中。
     
    三、相对于classpath的相对路径
    如:相对于
    file:/D:/java/eclipse32/workspace/jbpmtest3/bin/这个路径的相对路径。其中,bin是本项目的classpath。所有的Java源文件编译后的.class文件复制到这个目录中。
     
     
    四、相对于当前用户目录的相对路径
    就是相对于System.getProperty("user.dir")返回的路径。
    对于一般项目,这是项目的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统一的规范!
    所以,绝对不要使用“相对于当前用户目录的相对路径”。然而:
    默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
    这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然在J2SE应用程序中可能还算正常,但是到了J2EE程序中,一定会出问题!而且这个路径,在不同的服务器中都是不同的!
     
    相对路径最佳实践
    推荐使用相对于当前classpath的相对路径
    因此,我们在使用相对路径时,应当使用相对于当前classpath的相对路径。
    ClassLoader类的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当前项目的classpath的相对路径来查找资源。
    读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。
    通过查看ClassLoader类及其相关类的源代码,我发现,它实际上还是使用了URI形式的绝对路径。通过得到当前classpath的URI形式的绝对路径,构建了相对路径的URI形式的绝对路径。(这个实际上是猜想,因为JDK内部调用了SUN的源代码,而这些代码不属于JDK,不是开源的。)
     
    相对路径本质上还是绝对路径
    因此,归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
     
    得到classpath和当前类的绝对路径的一些方法
        下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。
    1,FileTest.class.getResource("")
    得到的是当前类FileTest.class文件的URI目录。不包括自己!
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
    2,FileTest.class.getResource("/")
    得到的是当前的classpath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    3,Thread.currentThread().getContextClassLoader().getResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    4,FileTest.class.getClassLoader().getResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    5,ClassLoader.getSystemResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
       
    我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。
     
    Web应用程序中资源的寻址
        上文中说过,当前用户目录,即相对于System.getProperty("user.dir")返回的路径。
    对于JavaEE服务器,这可能是服务器的某个路径,这个并没有统一的规范!
    而不是我们发布的Web应用程序的根目录!
    这样,在Web应用程序中,我们绝对不能使用相对于当前用户目录的相对路径。
    在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。
    这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。
    这是我们开发Web应用程序时一般所采取的策略。
     
    通用的相对路径解决办法
    Java中各种相对路径非常多,不容易使用,非常容易出错。因此,我编写了一个便利方法,帮助更容易的解决相对路径问题。
     
    Web应用程序中使用JavaSE运行的资源寻址问题
    在JavaSE程序中,我们一般使用classpath来作为存放资源的目的地。但是,在Web应用程序中,我们一般使用classpath外面的WEB-INF及其子目录作为资源文件的存放地。
    在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。
    Web应用程序,可以作为Web应用程序进行发布和运行。但是,我们也常常会以JavaSE的方式来运行Web应用程序的某个类的main方法。或者,使用JUnit测试。这都需要使用JavaSE的方式来运行。
    这样,我们就无法使用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。
    而JDK提供的ClassLoader类,
    它的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当前项目的classpath的相对路径来查找资源。
    读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。
    它们都只能使用相对路径来读取classpath下的资源,无法定位到classpath外面的资源。
    Classpath外配置文件读取问题
    如,我们使用测试驱动开发的方法,开发Spring、Hibernate、iBatis等使用配置文件的Web应用程序,就会遇到问题。
    尽管Spring自己提供了FileSystem(也就是相对于user,dir目录)来读取Web配置文件的方法,但是终究不是很方便。而且与Web程序中的代码使用方式不一致!
    至于Hibernate,iBatis就更麻烦了!只有把配置文件移到classpath下,否则根本不可能使用测试驱动开发!
     
        这怎么办?
     
    通用的相对路径解决办法
    面对这个问题,我决定编写一个助手类ClassLoaderUtil,提供一个便利方法[public static URL getExtendResource(String relativePath)]。在Web应用程序等一切Java程序中,需要定位classpath外的资源时,都使用这个助手类的便利方法,而不使用Web应用程序特有的ServletContext.getRealPath("/")方法来定位资源。
     
    利用classpath的绝对路径,定位所有资源
    这个便利方法的实现原理,就是“利用classpath的绝对路径,定位所有资源”。
    ClassLoader类的getResource("")方法能够得到当前classpath的绝对路径,这是所有Java程序都拥有的能力,具有最大的适应性!
    而目前的JDK提供的ClassLoader类的getResource(String 相对路径)方法,只能接受一般的相对路径。这样,使用ClassLoader类的getResource(String 相对路径)方法就只能定位到classpath下的资源。
    如果,它能够接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源,那么我们就可以定位位置的资源!
    当然,我无法修改ClassLoader类的这个方法,于是,我编写了一个助手类ClassLoaderUtil类,提供了[public static URL getExtendResource(String relativePath)]这个方法。它能够接受带有“../”符号的相对路径,实现了自由寻找资源的功能。
     
    通过相对classpath路径实现自由寻找资源的助手类的源代码:
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Properties;
     
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
     
    /**
     *@author沈东良shendl_s@hotmail.com
     *Nov29,2006 10:34:34AM
     *用来加载类,classpath下的资源文件,属性文件等。
     *getExtendResource(StringrelativePath)方法,可以使用../符号来加载classpath外部的资源。
     */
    publicclass ClassLoaderUtil {
        privatestatic Log log=LogFactory.getLog(ClassLoaderUtil.class);
        /**
         *Thread.currentThread().getContextClassLoader().getResource("")
         */
       
        /**
         *加载Java类。 使用全限定类名
         *@paramclassName
         *@return
         */
        publicstatic Class loadClass(String className) {
            try {
              return getClassLoader().loadClass(className);
            } catch (ClassNotFoundException e) {
              thrownew RuntimeException("class not found '"+className+"'", e);
            }
         }
         /**
           *得到类加载器
           *@return
           */
         publicstatic ClassLoader getClassLoader() {
         
            return ClassLoaderUtil.class.getClassLoader();
         }
         /**
           *提供相对于classpath的资源路径,返回文件的输入流
           *@paramrelativePath必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找
           *@return 文件输入流
         *@throwsIOException
         *@throwsMalformedURLException
           */
         publicstatic InputStream getStream(String relativePath) throws MalformedURLException, IOException {
             if(!relativePath.contains("../")){
                 return getClassLoader().getResourceAsStream(relativePath);
                 
             }else{
                 return ClassLoaderUtil.getStreamByExtendResource(relativePath);
             }
           
         }
         /**
           *
           *@paramurl
           *@return
           *@throwsIOException
           */
         publicstatic InputStream getStream(URL url) throws IOException{
             if(url!=null){
                 
                    return url.openStream();
               
                 
             }else{
                 returnnull;
             }
         }
         /**
           *
           *@paramrelativePath必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找
           *@return
           *@throwsMalformedURLException
           *@throwsIOException
           */
         publicstatic InputStream getStreamByExtendResource(String relativePath) throws MalformedURLException, IOException{
            return ClassLoaderUtil.getStream(ClassLoaderUtil.getExtendResource(relativePath));
             
             
         }
         
          /**
           *提供相对于classpath的资源路径,返回属性对象,它是一个散列表
           *@paramresource
           *@return
           */
         publicstatic Properties getProperties(String resource) {
            Properties properties = new Properties();
            try {
              properties.load(getStream(resource));
            } catch (IOException e) {
              thrownew RuntimeException("couldn't load properties file '"+resource+"'", e);
            }
            return properties;
         }
         /**
           *得到本Class所在的ClassLoader的Classpat的绝对路径。
           *URL形式的
           *@return
           */
         publicstatic String getAbsolutePathOfClassLoaderClassPath(){
             
             
             ClassLoaderUtil.log.info(ClassLoaderUtil.getClassLoader().getResource("").toString());
             return ClassLoaderUtil.getClassLoader().getResource("").toString();
             
         }
         /**
           *
           *@paramrelativePath 必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找
           *@return资源的绝对URL
         *@throwsMalformedURLException
           */
         publicstatic URL getExtendResource(String relativePath) throws MalformedURLException{
         
             ClassLoaderUtil.log.info("传入的相对路径:"+relativePath) ;
             //ClassLoaderUtil.log.info(Integer.valueOf(relativePath.indexOf("../"))) ;
             if(!relativePath.contains("../")){
                 return ClassLoaderUtil.getResource(relativePath);
                 
             }
             String classPathAbsolutePath=ClassLoaderUtil.getAbsolutePathOfClassLoaderClassPath();
             if(relativePath.substring(0, 1).equals("/")){
                 relativePath=relativePath.substring(1);
             }
             ClassLoaderUtil.log.info(Integer.valueOf(relativePath.lastIndexOf("../"))) ;
           
             String wildcardString=relativePath.substring(0,relativePath.lastIndexOf("../")+3);
            relativePath=relativePath.substring(relativePath.lastIndexOf("../")+3);
             int containSum=ClassLoaderUtil.containSum(wildcardString, "../");
             classPathAbsolutePath= ClassLoaderUtil.cutLastString(classPathAbsolutePath, "/", containSum);
             String resourceAbsolutePath=classPathAbsolutePath+relativePath;
             ClassLoaderUtil.log.info("绝对路径:"+resourceAbsolutePath) ;
             URL resourceAbsoluteURL=new URL(resourceAbsolutePath);
             return resourceAbsoluteURL;
         }
         /**
          *
           *@paramsource
           *@paramdest
           *@return
           */
         privatestaticint containSum(String source,String dest){
             int containSum=0;
             int destLength=dest.length();
             while(source.contains(dest)){
                 containSum=containSum+1;
                 source=source.substring(destLength);
                 
             }
             
             
             return containSum;
         }
         /**
           *
           *@paramsource
           *@paramdest
           *@paramnum
           *@return
           */
         privatestatic String cutLastString(String source,String dest,int num){
             // String cutSource=null;
             for(int i=0;i<num;i++){
                 source=source.substring(0, source.lastIndexOf(dest, source.length()-2)+1);
                 
                 
             }
             
             
             
             return source;
         }
         /**
           *
           *@paramresource
           *@return
           */
          publicstatic URL getResource(String resource){
          ClassLoaderUtil.log.info("传入的相对于classpath的路径:"+resource) ;
             return ClassLoaderUtil.getClassLoader().getResource(resource);
         }
        
     
         
     
        /**
         *@paramargs
         *@throwsMalformedURLException
         */
        publicstaticvoid main(String[] args) throws MalformedURLException {
           
                //ClassLoaderUtil.getExtendResource("../spring/dao.xml");
            //ClassLoaderUtil.getExtendResource("../../../src/log4j.properties");
            ClassLoaderUtil.getExtendResource("log4j.properties");
           
            System.out.println(ClassLoaderUtil.getClassLoader().getResource("log4j.properties").toString());
     
        }
     
    }
     
    后记
    ClassLoaderUtil类的public static URL getExtendResource(String relativePath),虽然很简单,但是确实可以解决大问题。
    不过这个方法还是比较简陋的。我还想在未来有空时,进一步增强它的能力。比如,增加Ant风格的匹配符。用**代表多个目录,*代表多个字符,?代表一个字符。达到Spring那样的能力,一次返回多个资源的URL,进一步方便大家开发。
     
    总结:
    1,尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。这是一颗定时炸弹,随时可能要你的命。
    2,尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。
    3,尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
    4,绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。
    使用硬编码的绝对路径是完全没有必要的!它一定会让你死的很难看!程序将无法移植!
    如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!
    当然,我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径!
     
     
     
    展开全文
  •  java 路径访问全接触 收藏 前言:  前一段时间,由于在处理Web应用下的文件创建与移动等,因此涉及到很多关于java 中相对路径,绝对路径等问题。同时,对于Web应用中的相对路径,绝对路径,...

     

    原创  java 路径访问全接触 收藏

     前言:
     前一段时间,由于在处理Web应用下的文件创建与移动等,因此涉及到很多关于java
    中相对路径,绝对路径等问题。同时,对于Web应用中的相对路径,绝对路径,以及Java.io.File
    类学习了一下。也找了一些资料。希望大家遇到类似的问题,可以更有效的解决。

    =================================================================================
    1.基本概念的理解

      绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
    C:/xyz/test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个
    URL绝对路径。

      相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
    Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,
    "../"代表上级目录。这种类似的表示,也是属于相对路径。

    另外关于URI,URL,URN等内容,请参考RFC相关文档标准。

    RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, 
    (http://www.ietf.org/rfc/rfc2396.txt)


    2.关于JSP/Servlet中的相对路径和绝对路径。

    2.1服务器端的地址

       服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
    (不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
    在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

      其用到的地方有: 
     forward:servlet中的request.getRequestDispatcher(address);这个address是
    在服务器端解析的,所以,你要forward到a.jsp应该这么写:
    request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,
    其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。 
    sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

    2.22、客户端的地址 
     
           所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,
    而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。 
     Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
    所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jsp;
      提交到servlet为actiom="/webapp/handleservlet"  
       Javascript也是在客户端解析的,所以其相对路径和form表单一样。

      因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
    <%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
    另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样
    当文件移动时,很容易出问题。


    3. JSP/Servlet中获得当前应用的相对路径和绝对路径
    3.1 JSP中获得当前应用的相对路径和绝对路径
     根目录所对应的绝对路径:request.getRequestURI()
     文件的绝对路径     :application.getRealPath(request.getRequestURI());
     当前web应用的绝对路径 :application.getRealPath("/");
     取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

    3.2 Servlet中获得当前应用的相对路径和绝对路径
     根目录所对应的绝对路径:request.getServletPath();
     文件的绝对路径    :request.getSession().getServletContext().getRealPath
    (request.getRequestURI())   
     当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
         (ServletContext对象获得几种方式:
           javax.servlet.http.HttpSession.getServletContext() 
           javax.servlet.jsp.PageContext.getServletContext() 
           javax.servlet.ServletConfig.getServletContext() 
         )

    4.java 的Class中获得相对路径,绝对路径的方法
    4.1单独的Java类中获得绝对路径
      根据java.io.File的Doc文挡,可知:
     默认情况下new File("/")代表的目录为:System.getProperty("user.dir")。
     一下程序获得执行类的当前路径
    package org.cheng.file;
    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"));    
     }
    }

    4.2服务器中的Java类获得当前路径(来自网络)
    (1).Weblogic

    WebApplication的系统文件根目录是你的weblogic安装所在根目录。
    例如:如果你的weblogic安装在c:/bea/weblogic700.....
    那么,你的文件根路径就是c:/.
    所以,有两种方式能够让你访问你的服务器端的文件:
    a.使用绝对路径:
    比如将你的参数文件放在c:/yourconfig/yourconf.properties,
    直接使用 new FileInputStream("yourconfig/yourconf.properties");
    b.使用相对路径:
    相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

    在yourwebapp/yourconfig/yourconf.properties,
    这样使用:
    new FileInputStream("./yourconfig/yourconf.properties");
    这两种方式均可,自己选择。

    (2).Tomcat

    在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin

    (3).Resin

    不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
    的路径为根.比如用新建文件法测试File f = new File("a.htm");
    这个a.htm在resin的安装目录下

    (4).如何读相对路径哪?

    在Java文件中getResource或getResourceAsStream均可

    例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web

    发布根路径下WEB-INF/classes

    默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

    5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)
    5.1 采用Spring的DI机制获得文件,避免硬编码。
       参考下面的连接内容:
       http://www.javajia.net/viewtopic.php?p=90213&
    5.2 配置文件的读取
     参考下面的连接内容:
     http://dev.csdn.net/develop/article/39/39681.shtm
    5.3 通过虚拟路径或相对路径读取一个xml文件,避免硬编码
     参考下面的连接内容:
     http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8
     
    6.Java中文件的常用操作(复制,移动,删除,创建等)(来自网络)
     常用 java File 操作类 
     http://www.easydone.cn/014/200604022353065155.htm
     
     Java文件操作大全(JSP中)
     http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

     java文件操作详解(Java中文网)
     http://www.51cto.com/html/2005/1108/10947.htm

     JAVA 如何创建/删除/修改/复制目录及文件
     http://www.gamvan.com/developer/java/2005/2/264.html

    总结:
     通过上面内容的使用,可以解决在Web应用服务器端,移动文件,查找文件,复制
     删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。
    建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻
    对其他方面的理解可以更加深入和透彻。
    ==================================================================================

    参考资料:
    java/docs/

    java.io.File
    java.io.InputStream
    java.io.OutputStream
    java.io.FileInputStream
    java.io.FileReader;
    java.io.FileOutputStream
    java.io.FileWriter;
    java.net.URI
    java.net.URL


    绝对路径与相对路径祥解
    http://www.webjx.com/htmldata/2005-02-26/1109430310.html

    [『J道习练』]JSP和Servlet中的绝对路径和相对路径
    http://w3china.org/blog/more.asp?name=pcthomas&id=9122&commentid=12376

    JSP,Servlet,Class获得当前应用的相对路径和绝对路径
    http://cy.lzu.edu.cn/cy/club/clubPage.jsp?ccStyle=0&tID=886&ccID=77

    如何获得当前文件路径
    http://www.matrix.org.cn/resource/article/44/44113_java.html

    通过Spring注入机制,取得文件
    http://www.javajia.net/viewtopic.php?p=90213&

    配置文件的读取 
    http://dev.csdn.net/develop/article/39/39681.shtm

    读取配置文件,通过虚拟路径或相对路径读取一个xml文件,避免硬编码! 
    http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

    常用 java File 操作类
    http://www.easydone.cn/014/200604022353065155.htm

    Java文件操作大全
    http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

    Java文件操作详解
    http://www.51cto.com/html/2005/1108/10947.htm


    首先说可以用下面的方法查看当前的目录,你的文件路径就可以以此为据:
    System.out.println(System.getProperty("user.dir"));

    如果你用这个方法来杳看你JSP页面,可以发现它的路径很奇怪,其实它是JSP引擎路径。所以当你用
        new File(String path);
    时,如果用的是相对路径,就得相对真实的当前路径,而不是任何你想当然的路径 。
    当然对于这个方法用”绝对路径“一般是不会出错的。只是这样,程序的灵活性就受到了限制。下面就是一个绝对路径 的例子:
        String xmlPath = "D://PublicFiles//WCI//navigation.xml";

    Part 2
    FileStream file = this.getClass().getClassLoader().getResourceAsStream(String xmlPath);
    这个有点复杂,我了解的也不多,这里就说说现在我所了解的吧,以后再补充!
    System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
    如此就可以看到相对“/”的根路径。
    对   FileStream fileStream = this.getClass().getClassLoader().getResourceAsStream(filePath);
    这里的filePath似乎只能用相对路径,至少我不知道用绝对路径怎么表示:
    下面取个相对路径的例子:
        String filePath = "/../../Resources/XML/navigation.xml"; //表达规则和LINUX一样。

    System.out.println(this.getClass().getClassLoader().getResource(".").getPath());
    System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
    System.out.println(this.getClass().getClassLoader().getResource("").getPath());
    System.out.println(this.getClass().getClassLoader().getResource("..").getPath());
    相信,看过这四个路径结果就应该知道在哪放置自己的文件了,用什么样的语句能找到。

    今天在写一个写JSP时,碰到上面的文件路径的问题,简单的了解下,相信其中定有不少的错误,希望你能提出并改正,我在此谢过了!

    一. 问题
        JSP 中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决。
    1) 采用相对路径遇到的问题
    l          相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。
    l          如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。
    l          如果采用 Struts 的 Action 返回页面,那么由于页面路径与 Action 路径不同,使得浏览器无法正确解释页面中的路径,如页面为 /pages/cust/cust.jsp ,图片所有目录为 /images/title.gif ,这时在 /pages/cust/cust.jsp 中的所用的路径为 ”../../images/title.gif” ,但是如果某一个 Action 的 Forward 指向这个 JSP 文件,而这个 Action 的路径为 /cust/manage.do ,那么页面内容中 ”../../images/title.gif” 就不再指向正确的路径了。
    解决以上问题似乎只有使用绝对路径了。
    2) 采用绝对路径遇到的问题
    l          随着不同的 Web 应用发布方式,绝对路径的值也不同。如 Web 应用发布为 MyApp ,则路径 ”/MyApp/images/title.gif” 是正确的,但发布为另一应用时如 MyApp2 ,这个路径就不对了,也许这个情况比较少,但以 default 方式发布 Web 应用时以上绝对路径也不同: ”/images/title.gif” 。

    二. 解决方案

    1)  采用绝对路径,但为了解决不同部署方式的差别,在所有非 struts 标签的路径前加 ${pageContext.request.contextPath} ,如原路径为:
    ”/images/title.gif” ,改为
    “${pageContext.request.contextPath}/images/title.gif” 。
    代码 ” ${pageContext.request.contextPath}” 的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

    缺点:

    操作不便,其他工具无法正确解释 ${pageContext.request.contextPath}
    2)  采用相对路径,在每个 JSP 文件中加入 base 标签,如:
    <base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />
    这样所有的路径都可以使用相对路径。

    缺点:

    对于被包含的文件依然无效。
        真正使用时需要灵活应用1)和2),写出更加健壮的代码。

    JSP  Servlet 中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享。

           前提:假设你的 Http 地址为 http://192.168.0.1/ 你的 web 应用为 webapp ,那么你的 web 应用 URL  http://192.168.0.1/webapp/

           web 应用的目录结构:

           webapp/

                  web-inf/

                     classes/

                         lib/

                         web.xml

                                  <servlet-mapping>

                                   <servlet-name>handleservlet</servlet-name>

                                   <url-pattern>/handleservlet</url-pattern> 此映射是相对于当前 web 应用的

                                 </servlet-mapping>

                  user/

    a.jsp

    b.jsp

                  images/

                  css/

                  js/

                 

           所有相对路径都是由“ / ”开头的。如: /image/a.gif  /user/main.jsp ,大家知道在 html 中的相对路径是这样的:

           有个 html 文件: a.html ,其中有 <link href="one.css" rel="stylesheet" type="text/css"> ,其中 href 属性表示引用的 css 文件的路径。

    one.css :表示 one.css  a.hmtl 处于同一个目录

    user/one.css :表示 one.css 处于 a.html 所在目录的子目录 user 中。

    ../one.css :表示 one.css 位于 a.hmtl 上一级目录下,

    ../../one.css :表示 one.css 位于 a.hmtl 上一级目录的上一级目录下,

    ./ :表示和 a.hmtl 同一目录

    我们称上述相对路径为 html 相对路径

    1、 服务器端的地址

    服务器端的相对地址指的是相对于你的 web 应用的地址,这个地址是在服务器端解析的(不同于 html  javascript 中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在 jsp  servlet 中的相对地址应该是相对于你的 web 应用,即相对于 http://192.168.0.1/webapp/ 的。

    其用到的地方有:

    forwarder  servlet 中的 request.getRequestDispatcher(address); 这个 address 是在服务器端解析的,所以,你要 forwarder  a.jsp 应该这么写: request.getRequestDispatcher(“/user/a.jsp”) 这个 / 相对于当前的 web 应用 webapp ,其绝对地址就是: http://192.168.0.1/webapp/user/a.jsp 

    sendRedirect :在 jsp  <%response.sendRedirect("/rtccp/user/a.jsp");%>

    2、 客户端的地址

    所有的 html 中的相对地址都是相对于 http://192.168.0.1/ 的,而不是 http://192.168.0.1/webapp/ 的。

    Html 中的 form 表单的 action 属性的地址应该是相对于 http://192.168.0.1/ 的,所以,如果提交到 a.jsp 为: action  ”/webapp/user/a.jsp” ;提交到 servlet  action  ”/webapp/handleservlet”

    Javascript 也是在客户端解析的,所以其相对路径和 form 表单一样。

    3、 站点根目录和 css 路径问题

    我们称类似这样的相对路径 /webapp/…. 为相对于站点根目录的相对路径。

    当在 jsp 中引入 css 时,如果其相对路径相对于当前 jsp 文件的,而在一个和这个 jsp 的路径不一样的 servlet  forwarder 这个 jsp 时,就会发现这个 css 样式根本没有起作用。这是因为在 servlet 中转发时 css 的路径就是相对于这个 servlet 的相对路径而非 jsp 的路径了。所以这时候不能在 jsp 中用这样的路径: <link href="one.css" rel="stylesheet" type="text/css"> 或者 <link href="../../one.css" rel="stylesheet" type="text/css"> 类似 href="one.css"  ../../one.css  html 相对路径是相对于引用这个 css 的文件的相对路径。而在 servlet 中转发时就是相对于这个 servlet 的相对路径了,因为 jsp 路径和 servlet 路径是不一样的,所以这样的引用肯定是出错的。

    所以这个时候,要用站点根目录,就是相对于 http://192.168.0.1/ 的目录,以“ / ”开头。

    因此上述错误应更正为 href=”/webapp/one.css” 类似的站点根目录的相对目录。这样在 servlet 转发后和 jsp 中都是相对于站点根目录的相对路径,就能正确使用所定义的 css 样式了。

     

    说了这么多,不知道你了解没,有什么问题留言,大家一块交流!

     

    展开全文
  •         ...--resources配置解决mybatis 的mapperXml配置在java路径不被扫描的问题 --&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;src...
  • 当将属性文件 或配置文件放置在java路径下时(mybatis 配置mapping文件等)的问题 问题原因:maven在构建过程中java路径下的属性以及配置文件不会被构建(Maven会按照标准的目录结构查找和处理各种类型文件...
  • java 路径中 /与\\ linux系统的路径

    千次阅读 2019-03-14 09:29:00
    java路径一般用"/" windows中的路径一般用"\" linux、unix中的路径一般用"/" 所以在java中写windows路径一般用"/"或将"\"转义一下,就成了"\\" ...
  • java 路径分隔符

    千次阅读 2015-11-10 21:05:12
    参考:《Java语言程序设计》第8章 Java输入输出 ################################################################### 对于路径的分隔符,不同的系统使用的符号不同。在Windows系统下使用反斜线(\),在...
  • activemq指定java路径问题

    千次阅读 2017-05-19 02:14:02
    今天下载了个window版本的apache-activemq-5.14.5-bin.zip解压运行bin\win64的bat文件是报了个版本的错误,因为自己机器的java_home是指向1.6的 ...最后自己找到了bin\win64路径下的wrapper.conf 文件
  • java 路径遍历 漏洞修复

    千次阅读 2018-09-14 16:44:45
    private static Pattern FilePattern = Pattern.compile("... * 路径遍历 漏洞修复 * @param str * @return */ public static String filenameFilter(String str) { return str=...
  • 绝对路径、相对路径
  • public static final String WEB_ROOT = System.getProperty("user.dir") + File.separator + "webroot"; File file = new File(WEB_ROOT+"\\a.html"... System.out.println("相对路径:"+file.getPath()); System.out
  • Java路径问题最终解决方案使用演示

    千次阅读 2006-12-03 14:32:00
    Java路径问题最终解决方案使用演示前言在《Java路径问题最终解决方案—可定位所有资源的相对路径寻址》一文中,我给大家提供了一个助手类ClassLoaderUtil ,和它的public static URL getExtendResource(String ...
  • Java 路径】运行可执行jar包获取相关路径

    万次阅读 多人点赞 2017-01-07 11:55:40
    一、获取可执行jar包所在目录(1)方法一:使用System.getProperty("java.class.path")获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:/** * 方法一:...
  • JAVA路径中空格问题

    千次阅读 2017-02-02 22:25:19
    一、类路径 TestURL().class.getResource("").getPath()或TestURL.class.getResource("").getFile()获得的路径,不能被FileReader()和FileWriter()直接应用。 例如: String Path=this.getClass().getResource...
  • java 路径应对转义字符

    千次阅读 2013-07-15 17:34:51
    java中 因为转义字符的原因 所以路径都写 \\ 比如说为了取路径方便 存的时候存 D:\\upload\\1.jpg 问题是 被java 给转义了 数据库中得路径为 D:\upload\.jpg…. 要是我们将图片取出的时候 , 运行就会出错...
  • mac版HBuilder java路径问题解决

    万次阅读 2016-09-18 13:47:12
    有的时候在mac下安装HBuilder会出现如下情况 应该是默认的java环境和我们安装的java不一致导致的.所以把默认的路径更改即可.步骤如下 (1)对于解压后的HBuilder文件-右键显示包内容
  • linux上java路径设置

    千次阅读 2012-04-30 22:14:30
    往/etc/profile文件中添加下面几行: export JAVA_HOME=/usr/java/jre1.6.0_31 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$...第一行是jre的安装路径。下载并安装jre的方法
  • Linux下Java路径问题/Javac java -cp

    千次阅读 2015-03-15 16:06:45
    下面就来讨论下路径问题: 如果你的程序test.java和jar包test.jar都在/home/demo文件夹下: 1)怎么引用多个jar包  这需要我们设置classpath 或者cp 来引入多个jar包,这个大家都知道,但是多个jar包之间...
  • 关于linux java路径及环境变量的配置

    千次阅读 2016-12-10 11:19:46
    最近在linux服务器某个用户下... 后来用which java 命令查看java命令执行路径后发现在/usr/bin/java下的路径,后来才发现他们把java环境变量配置在了~/.bashrc中,修改了path路径,再查看时java版本变回了1.8!  
  • linux下查看java路径

    千次阅读 2010-01-18 18:35:00
    用命令 whereis java就可以看到了 eg: -bash-3.1$ whereis java java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java /opt/jdk1.6.0_01/bin/java 如果仅仅想知道java执行路径在那里的话 用which java就...
  • java路径在windows和linux中的区别

    千次阅读 2018-07-10 13:55:34
    java代码中,拼接的路径包含有”/”, 比如:String path = getSavePath+"/"+getName; 在windows中是没有问题的,但是如果将项目部署到linux上会出现找不到该路劲的问题; 解决方式: 让文件路径根据...
  • 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。 相对路径:...
  • 自己下了jdk配置好环境,还是提示没找到![图片](https://img-ask.csdn.net/upload/201608/31/1472613994_782401.jpg)
  • 最近在学习自动化,在新的mac本上配置环境变量时遇到了一些问题,由于mac自带jdk,但是没有配置环境变量,对于要在mac上使用adb命令的同学就需要配置了 ...pcdeMacBookPro:Users pc$ JAVA_HOME='/usr/libexec/java_
  • 问题一:cmd里输入java可运行,而javac不可运行。 问题原因:如果你下载的java是最新版本version 9的话,...解决办法: 下载java version 8 或以下的版本,确保路径下是带class_path路径下的文件。问题二:cmd里输入...
  • java路径两种写法"/"和"\\

    千次阅读 2018-12-03 15:37:20
    java路径一般用"/" windows中的路径一般用"\" linux、unix中的路径一般用"/" 所以在java中写windows路径一般用"/"或将"\"转义一下,就成了"\\" ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,662
精华内容 46,264
关键字:

java路径

java 订阅