精华内容
下载资源
问答
  • Java中文件的相对路径与绝对路径

    万次阅读 多人点赞 2015-09-14 18:47:46
    通过这篇博客可以深入理解Java中相对路径与绝对路径的概念,同时对Eclipse和tomcat中的相对路径也做介绍,有助于开发。另外,getPath()、getAbsolutePath()、getCanonicalPath()的区别也做了说明。

    一、Linux和Windows路径分隔符

    Linux下:”/”

    Window下:”\\”

    Java中通用:System.getProperty(“file.separator”);

    二、相对路径


    2.1 相对路径的概念

    相对路径指的是相对JVM的启动路径。

    举个例子:假设有一java源文件Example.java在d盘根目录下。我们进入命令行窗口,进入到d盘根目录下,然后用“javac Example.java”来编译此文件,编译无错后,会在d盘根目录下自动生成”Example.class”文件。我们再调用”java Example”来运行该程。此时我们已经启动了一个jvm,这个jvm是在d盘根目录下被启动的,所以此jvm所加载的程序中File类的相对路径也就是相对这个路径的,即d盘根目录D:\。

    搞清了这些,我们可以使用相对路径来创建文件,例如:

    File file = new File(“a.tx”);

    file.createNewFile();

    假设jvm是在”D:\”下启动的,那么a.txt就会生成在D:\a.txt;

    2.2 如何通过文件路径创建文件对象

    下面的ResourceTest项目中有4个文件,1.properties、2.properties、3.properties、4.properties。

    当我们需要使用这4个文件的时候,怎样创建文件对象呢?


    编译后,4个文件的路径如下:

    ResourceTest/1.properties                     
    ResourceTest/bin\2.properties                 
    ResourceTest/bin\com\ghs\test\3.properties    
    ResourceTest/bin\com\ghs\test\sub\4.properties

    前面我们说过,JAVA中文件路径是相对JVM的启动路径的,对于简单的JAVA项目,其JVM是在项目名称下启动的,所以,ResourceTest中4个文件的相对路径分别是:

    ./1.properties   或者1.properties                  
    ./bin\2.properties  或者  bin\2.properties               
    ./bin\com\ghs\test\3.properties   或者bin\com\ghs\test\3.properties 
    ./bin\com\ghs\test\sub\4.properties  或者 bin\com\ghs\test\sub\4.properties

    附:“.”或”.\”代表当前目录,这个目录也就是jvm启动路径。

    public class MainTest {
    
    	public static void main(String[] args) {
    		
    		File file1 = new File("./1.properties");
    		//File file1 = new File("test1.txt");
    		
    		File file2 = new File("./bin/2.properties");
    		//File file2 = new File("bin/2.properties");
    		
    		File file3 = new File("./bin/com/ghs/test/3.properties");
    		//File file3 = new File("bin/com/ghs/test/3.properties");
    
    		File file4 = new File("./bin/com/ghs/test/sub/4.properties");
    		//File file4 = new File("bin/com/ghs/test/sub/4.properties");
    		
    		try {
    			System.out.println(file1.exists()+":"+file1.getCanonicalPath());
    			System.out.println(file2.exists()+":"+file2.getCanonicalPath());
    			System.out.println(file3.exists()+":"+file3.getCanonicalPath());
    			System.out.println(file4.exists()+":"+file4.getCanonicalPath());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }

    程序运行结果如下:

    true:D:\me\open\open-project\ResourceTest\1.properties
    true:D:\me\open\open-project\ResourceTest\bin\2.properties
    true:D:\me\open\open-project\ResourceTest\bin\com\ghs\test\3.properties
    true:D:\me\open\open-project\ResourceTest\bin\com\ghs\test\sub\4.properties


    上面创建文件的方式太过于繁琐,所以一般情况下,对于test2.txt和text3.txt的获取,我们倾向于采取下面的方法:

    File file2 = new File(Test.class.getResource("/test2.txt").toURI());

    File file2 = new File(Test.class.getResource("test3.txt").toURI());


    Tomcat中的情况,如果在tomcat中运行web应用,此时,如果我们在某个类中使用如下代码:

    File f = new File(".");

    String absolutePath = f.getAbsolutePath();

    System.out.println(absolutePath);

    那么输出的将是tomcat下的bin目录.我的机器就D:\work\server\jakarta-tomcat-5.0.28\bin\.,由此可以看出tomcat服务器是在bin目录下启动jvm的,其实是在bin目录下的“catalina.bat”文件中启动jvm的。

    2.3 当前目录和上级目录

    “.”或”.\”代表当前目录,这个目录也就是jvm启动路径。

    下面的代码能得到当前完整目录:

    File f = new File(".");

    String absolutePath = f.getAbsolutePath();

    System.out.println(absolutePath);//D:\

    在当前目录下建立文件:File f = new File(“.\\test1.txt”);

     

    “..”代表当前目录的上级目录。

    在上级目录建立文件:File f = new File(“..\\..\\test1.txt”);

     

    三、getPath()、getAbsolutePath()、getCanonicalPath()的区别

    getPath()获取的是新建文件时的路径,例如:

    File file1 = new File(".\\test1.txt");通过getPath()获取的是.\\test1.txt

    File file = new File("D:\\Text.txt");通过getPath()获取的是D:\\Text.txt

     

    getAbsolutePath()获取的是文件的绝对路径,返回当前目录的路径+构造file时候的路径,例如:

    File file1 = new File(".\\test1.txt");通过getAbsolutePath()获取的是D:\workspace\test\.\test1.txt

     

    getCanonicalPath()获取的也是文件的绝对路径,而且把..或者.这样的符号解析出来,例如:File file = new File("..\\src

    \\test1.txt");通过getCanonicalPath()获取的是D:\workspace\src\test1.txt

    四、获取上级目录

    getParent()或者getParentFile();

    五、获取资源的路径

    Java中取资源时,经常用到Class.getResource()和ClassLoader.getResource(),这里来看看他们在取资源文件时候的路径问题。

    1.Class.getResource(String path)

    path  不以’/'开头时,默认是从此类所在的包下取资源;path  以’/'开头时,则是从ClassPath根下获取;

    什么意思呢?看下面这段代码的输出结果就明白了:

    package testpackage;
    public class TestMain{
        public static void main(String[] args) {
            System.out.println(TestMain.class.getResource(""));
            System.out.println(TestMain.class.getResource("/"));
        }
    } 

    输出结果:

    file:/E:/workspace/Test/bin/testpackage/

    file:/E:/workspace/Test/bin/

    上面说到的【path以’/'开头时,则是从ClassPath根下获取】,在这里就是相当于bin目录(Eclipse环境下)。

     

    如果我们想在TestMain.java中分别取到1~3.properties文件,该怎么写路径呢?代码如下:

    package testpackage;
     
    public class TestMain{
        public static void main(String[] args) {
            // 当前类(class)所在的包目录
            System.out.println(TestMain.class.getResource(""));
            // class根目录
            System.out.println(TestMain.class.getResource("/"));
            
            // TestMain.class在<bin>/testpackage包中
            // 2.properties  在<bin>/testpackage包中
            System.out.println(TestMain.class.getResource("2.properties"));
            
            // TestMain.class在<bin>/testpackage包中
            // 3.properties  在<bin>/testpackage.subpackage包中
            System.out.println(TestMain.class.getResource("subpackage/3.properties"));
            
            // TestMain.class在<bin>/testpackage包中
            // 1.properties  在bin目录(class根目录)
            System.out.println(TestMain.class.getResource("/1.properties"));
        }
    }
    
    ※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。


    2.Class.getClassLoader().getResource(String path)

    path不能以’/'开头时;

    path是从ClassPath根下获取;

     

    Class.getClassLoader().getResource(String path)

    package testpackage;
    public class TestMain{
        public static void main(String[] args) {
            TestMain t= new TestMain();
            System.out.println(t.getClass());
            System.out.println(t.getClass().getClassLoader());
            System.out.println(t.getClass().getClassLoader().getResource(""));
            System.out.println(t.getClass().getClassLoader().getResource("/"));//null
        }
    }
    


    输出结果:

    class testpackage.TestMainsun.misc.Launcher$AppClassLoader@1fb8ee3file:/E:/workspace/Test/bin/

    null

    从结果来看【TestMain.class.getResource("/") == t.getClass().getClassLoader().getResource("")】

    上面同样的目录结构,使用Class.getClassLoader().getResource(String path)可以这么写:

    package testpackage;
    public class TestMain{
        public static void main(String[] args) {
            TestMain t= new TestMain();
            System.out.println(t.getClass().getClassLoader().getResource(""));
            
            System.out.println(t.getClass().getClassLoader().getResource("1.properties"));
            System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties"));
            System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties"));
        }
    }

    ※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。
    展开全文
  • 创建File实例的相对路径与绝对路径

    千次阅读 2016-05-06 00:14:28
    创建File实例的相对路径与绝对路径String path = 可以是绝对路径也可以是相对路径File pom = new File(path);绝对路径没什么好说的相对路径java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性...

    创建File实例的相对路径与绝对路径

    String path = 可以是绝对路径也可以是相对路径

    File pom = new File(path);

    绝对路径

    没什么好说的

    相对路径

    java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是Java 虚拟机的调用目录,即System.getProperty(“user.dir”)

    如在eclipse工程中System.getProperty(“user.dir”)的值是工程所在目录

    File pom = new File("pom.xml"); //工程目录下的pom.xml
    File txt = new File("src/main/resources/resource.txt"); //工程目录\src\main\resources\resource.txt
    

    注意path前面不用加 / ,会被视为根目录,如File pom = new File("/pom.xml");会被视为路径:D:\pom.xml

    展开全文
  • java中通常相对于当前用户的的家目录,有系统属性“user.dir”指定,在eclipse 项目中,该属性值为项目路径,由该项目路径与相对路径合成文件绝对路径。 参考资料:java中相对路径绝对路径问题总结(verygood)...

    相对路径:相对与某个基准目录的路径。java中通常相对于当前用户的的家目录,有系统属性“user.dir”指定,在eclipse 项目中,该属性值为项目路径,由该项目路径与相对路径合成文件绝对路径。

     

    参考资料:
    java中相对路径,绝对路径问题总结(verygood)

    http://wj98127.javaeye.com/blog/281474
    http://www.blogjava.net/efine66/archive/2006/12/12/87097.html

     如何在java中使用相对路径?

    http://dev.csdn.net/develop/article/39/39681.shtm
    通过虚拟路径或相对路径读取一个xml文件,避免硬编码

    http://www.128kj.com/article/article5/7D66983DD9DD98A7753422A3A527FB6D.htm?id=438

    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/xml/hotspot.xml";
    InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);

    方法三:xml在随意某个包路径下:
    String s_xmlpath="com/xml/hotspot.xml";
    ClassLoader classLoader=HotspotXmlParser.class.getClassLoader();
    InputStream in=classLoader.getResourceAsStream(s_xmlpath);

    展开全文
  • 1.图片的绝对路径相对路径 eclipse中项目如下: 绝对路径不会错:例如下图中2.jpg的绝对路径如下: 但是一般项目是需要发布的,这样绝对路径就失效了。需要使用相对路径,这时,我就栽了...

    1.图片的绝对路径和相对路径

    eclipse中项目如下:


    绝对路径不会错:例如下图中2.jpg的绝对路径如下:




    <img src="D:\NutchWorkPlat\workspace\SearchPlat\WebContent\images\2.jpg"  style="width:300px;height:105px;"/>

    但是一般项目是需要发布的,这样绝对路径就失效了。需要使用相对路径,这时,我就栽了跟头。因为图片命名是以中文命名的,导致死活出现加载图片失败。正确的是应该用英文命名。

    <img src="images/3.jpg"  style="width:300px;height:105px;"/>


    2.图片和表单居中

    图片居中text-align:center;vertical-align:middle;但是表单居中text-align:center;vertical-align:middle;一般不起作用。

    我是通过设置绝对定位以及调节margin 来完成的。具体如下

    <div  style="position:absolute;top:50%; left:50%;margin:-100px 0 0 -300px;text-align:center;vertical-align:middle;">
    	<img src="images/3.jpg"  style="width:300px;height:105px;"/>
    	<form  id="search" name="search" action="search" method="get">
    		<input id="word" name="param" type="text" style=" width:500px; height:30px;">
    		<input style="color: blue;width:80px; height:30px;" type="submit" value="查询" >
    	</form>
    </div>



    展开全文
  • 1.基本概念的理解绝对路径绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理...相对路径:相对某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的
  • 如果项目要打包到别的地方部署时,注意使用相对路径。 如果要查看当前项目路径的话,这里以eclipse为例,在项目上右键选择properties Path:指的是相对与eclipse项目的路径 Type:此文件夹的项目 Location:电脑上的此...
  • 可是当我使用Eclipse和IDEA时,却发现绝对路径可以找到该文件,相对路径却无法找到该文件,在我上网翻阅查询后,却没有人给出一个中肯的答案,于是我开始自己动手操作,在经过多次试验之后,我发现需要把读取的文件...
  • 原文地址:https://blog.csdn.net/zmx729618/article/details/51144588Java路径 Java中使用的路径,分为两种:绝对路径相对路径。具体而言,又分为四种: 一、URI形式的绝对资源路径 如:file:/D:/java/eclipse...
  • 绝对路径:包括盘符在内的完整文件的路径。 例如:C:\Program Files\Java 这就是一个简单明了的例子相对路径:在当前文件目录下的文件的路径。 例如:可以在eclipse编辑器中的Java的工程名称上点...
  • eclipse快速找到当前文件的路径

    万次阅读 2018-07-18 08:42:23
    Path:指的是相对与eclipse项目的路径 Type:此文件夹的项目 Location:电脑上的此项目的绝对路径 Size:此文件的大小 Last modified:最后修改的时间 Text file ecoding:此文件的编码,默认GBK,可以修改为UTF-8 ...
  • 在下面中,我在mysql中存入了如下图片的相对路径 ... 但这样写的话,html是无法解析其...一般而言,都是会先获取该图片的根路径然后再数据库中存放的相对路径进行拼接组合成绝对路径,再上传到前台页面,但这样会是后台...
  • 在加载文件时需要知道文件之对应的project路径用于和模型相对路径拼接形成绝对路径来加载图片资源。因为ImageData的构造函数接受图片的绝对路径,ImageData(String filename)(底层基于FileInputStream实现,...
  • 绝对路径是path,表示一个文件从根目录(盘符)开始到该文件的整个路径,如:D:\application\eclipse\eclipse.exe (之相对的是相对路径,及从当前目录开始到达文件的路径,如:eclipse\eclipse.exe) 目录是p在Linux...
  • Java路径问题

    2017-06-29 01:44:51
    绝对路径:通常从盘符开始的路径(例如:G:/Eclipse/Model)。任何程序通过绝对路径都会“到达”一个相同的位置。 相对路径:基于某个“根路径”开始的路径(例如:/Model)。对于不同的根路径,相对路径实际指向...
  • Java之路径的获取

    2019-02-19 11:35:55
    相对路径与绝对路径: 相对路径:./当前路径 ../上一级路径 绝对路径:以/开头,代表是当前服务器目录下,客户端的绝对路径要加上项目名称:/ 项目名/lambo; 服务器断绝对路径不要写项目名:/lambo; *****eclipse中...
  • iO文件路径问题

    2017-03-05 23:48:18
    import java.io.File; import java.io.IOException; ... * 绝对路径:从盘符看开始的物理路径 ... * 在Eclipse 的java项目:使用相对路径 相对路径的 默认路径:当前项目路径  *   *   */ publ
  • Java路径简单的分可以分为两种:绝对路径相对路径。下面介绍有关Java路径分类的一些细节,以及使用Java路径时需要注意的问题。 具体而言,Java路径又分为四种: 一、URI形式的绝对资源路径如:...
  • 只需要在eclipse.ini添加如下一行参数,即添加JDK虚拟机路径:-vmC:\Program Files\Java\jdk1.7.0\jre\bin\javaw需要注意:1.-vm要写在-vm...可以写在最前面2.-vm参数下的路径需要绝对路径,不能用JAVA_HOME相对路径
  • 包的路径是相对路径。路径从相应的项目名再到libs文件夹add external jars=增加项目外部的jar包。包的路径是绝对路径add library = 增加一个库add class folder = 增加一个类文件夹add jar是表示从你的工程里添加JAR...
  • Eclipse导入JAR包的方法

    2016-04-07 17:12:21
    导入JAR包实际上就是建立一种链接(相对路径链接 或者 绝对路径链接),并不是COPY式的导入。 导入方法 方法一(建立的是相对路径链接): 如果是Web 工程,可以直接拷贝JAR 文件,放入工程的“WebRoot\WEB_INF\lib...
  • JUnit 从ClassLoader获取当前路径

    千次阅读 2017-05-23 17:32:07
    环境(Windows7, Eclipse: Version: Mars Release (4.5.0)...为了实现测试用例的可移植性,需要使用相对目录,而不是绝对目录. 如下例,测试用例所在目录(测试Java文件的根目录)放置了test1.dat和test2.dat两个文
  • 文件(文件):文件和目录路径名的...在eclipse环境中写的是一个相对路径绝对位置是工程目录。相对路径名必须使用取自其他路径名的信息进行解释。 文件中的静态静态: //File类静态成员变量 //返回系统...
  • 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 SwingSWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWTJFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...
  • 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 SwingSWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWTJFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...
  • 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 SwingSWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWTJFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...
  • 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 SwingSWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWTJFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

eclipse相对路径与绝对路径