getPath getAbsolutePath和getCanonicalPath的区别

File的这三个方法在api中都有说明,仅以程序为例说明。

package test;

import java.io.File;
import java.io.IOException;

public class TestFilePath {

 
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  System.out.println(System.getProperty("user.dir"));
  
  try {
   System.out.println("-----默认相对路径:取得路径不同------");
   File file1 = new File("..//src//test1.txt");
   System.out.println(file1.getPath());
   System.out.println(file1.getAbsolutePath());
   System.out.println(file1.getCanonicalPath());
   System.out.println("-----默认相对路径:取得路径不同------");
   File file = new File(".//test1.txt");
   System.out.println(file.getPath());
   System.out.println(file.getAbsolutePath());
   System.out.println(file.getCanonicalPath());
   
   System.out.println("-----默认绝对路径:取得路径相同------");
   File file2 = new File("D://workspace//test//test1.txt");
   System.out.println(file2.getPath());
   System.out.println(file2.getAbsolutePath());
   System.out.println(file2.getCanonicalPath());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

程序执行结果如下:

F:/eclipseworkspace/testejb
-----默认相对路径:取得路径不同------
../src/test1.txt
F:/eclipseworkspace/testejb/../src/test1.txt
F:/eclipseworkspace/src/test1.txt
-----默认相对路径:取得路径不同------
./test1.txt
F:/eclipseworkspace/testejb/./test1.txt
F:/eclipseworkspace/testejb/test1.txt
-----默认绝对路径:取得路径相同------
D:/workspace/test/test1.txt
D:/workspace/test/test1.txt
D:/workspace/test/test1.txt
结论:

当输入为绝对路径时,返回的都是绝对路径。

当输入为相对路径时:

getPath()返回的是File构造方法里的路径,是什么就是什么,不增不减

getAbsolutePath()返回的其实是user.dir+getPath()的内容,从上面F:/eclipseworkspace/testejb、F:/eclipseworkspace/testejb/../src/test1.txt、F:/eclipseworkspace/testejb/./test1.txt可以得出。

getCanonicalPath()返回的就是标准的将符号完全解析的路径

时间: 2024-10-31 11:09:55

getPath getAbsolutePath和getCanonicalPath的区别的相关文章

file的getPath getAbsolutePath和getCanonicalPath的不同

 file的这几个取得path的方法各有不同,下边说说详细的区别 概念上的区别:(内容来自jdk,个人感觉这个描述信息,只能让明白的人明白,不明白的人看起来还是有点难度(特别试中文版,英文版稍好些)所以在概念之后我会举例说明.如果感觉看概念很累就跳过直接看例子吧.看完例子回来看概念会好些. getPathpublic String getPath()将此抽象路径名转换为一个路径名字符串.所得到的字符串使用默认名称分隔符来分隔名称序列中的名称. 返回:此抽象路径名的字符串形式 getAbsolut

file.getPath() getAbsolutePath() getCanonicalPath()区别

getPath public String getPath()将此抽象路径名转换为一个路径名字符串.所得到的字符串使用默认名称分隔符来分隔名称序列中的名称. 返回: 此抽象路径名的字符串形式 getAbsolutePath public String getAbsolutePath()返回抽象路径名的绝对路径名字符串. 如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样.如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性

java File中 相关path疑问

问题描述 java File中 相关path疑问 File中的 getPath()和 getAbsolutePath(),getCanonicalPath() 有什么区别? 我自己验证是打印出的路径都一样,谁能举例或者能说出区别 ? 非常感谢 D:STSworkspace-stsinvoicingtargettest-classescnhyxiofiletesttest1.hyx.csv D:STSworkspace-stsinvoicingtargettest-classescnhyxiofi

SpringBoot开发案例之奇技淫巧

程序员都有着一种天生的好奇心,这种好奇心引导着我们的编程生涯.写几行代码,装载到计算机里,让它按照你的思路工作,这是非常有趣的事情.但随着开发的东西越来越多,我们变的越来越忙,这种好奇心会慢慢的减退.我们应该时不时的用一些新思路挑战自己,让自己的思想保持锋锐和专注,提醒自己为什么当初选择码农这条道路. 版本标注 小伙伴们可能会发现pom.xml中很多是没有版本号的比如: <dependency> <groupId>org.springframework.boot</group

我的Android进阶之旅------&amp;gt;/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别

转自:http://bbs.gfan.com/android-5382920-1-1.html 关于android的4.2的0文件夹的详解 ---- android 4.0 ----在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个. 所以,在userdata分区下有个目录叫media,是内置sd卡的数据存储位置,使用fuse技术将/data/media虚拟成为一

Java中路径的获取总结以及URL和URI的区别

先描述一下资源的位置:我在src下建了一个cn.config的包,里面有Config.xml这个文件.来看这一段代码 package cn.test; import java.net.URISyntaxException; import java.net.URL; public class PathTest {  public static void getURL()  {   URL url = PathTest.class.getClassLoader().getResource("&quo

java中File的getAbsolutePath()方法用时出现了麻烦,求

问题描述 //Main.javapackagea.iterator;importjava.io.FileNotFoundException;importjava.io.IOException;publicclassMain{publicstaticvoidmain(String[]args){StringfilePath="d:\dir";ReadFilerf=newReadFile();try{rf.readDir(filePath);}catch(NullPointerExcept

mfc-LBN_SELCHANGE和LBN_DBLCLK有什么区别?

问题描述 LBN_SELCHANGE和LBN_DBLCLK有什么区别? LBN_SELCHANGE和LBN_DBLCLK有什么区别呢,我是新手,请说的详细些. 解决方案 一个在选择更改的时候触发,一个在双击的时候触发 解决方案二: msdn文档中都有,详细地自己看,或者google下

固态硬盘做系统盘和做缓存盘有什么区别

  固态硬盘做系统盘和做缓存盘有什么区别          用固态硬盘直接做缓存盘不同于直接用固态硬盘做系统盘直接在固态硬盘上读取数据,固态硬盘做缓存盘的时候是根据用户经常访问的数据,将这一部分数据保存到固态硬盘上方便下次读取的时候快速读取而已,其作用类似硬盘的内存,只不过这块内存的数据并不会伴随关机而自动清空.         推荐阅读:让SSD速度飞起来 固态硬盘优化技巧大全  因此综上所述,最立竿见影的方法就是直接将固态硬盘做系统盘,并用剩余的容量安装游戏或者其他常用软件,这样收益是最明显