`
ihuashao
  • 浏览: 4513774 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java.io.File 中 getPath(), getAbsolutePath() 和 getCanonicalPath() 三个方法的区别

阅读更多
file的这几个取得path的方法各有不同,下边说说详细的区别

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

返回:
此抽象路径名的字符串形式

getAbsolutePath
publicStringgetAbsolutePath()返回抽象路径名的绝对路径名字符串。
如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与getPath()方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性user.dir指定。否则,使用与系统有关的方式分析此路径名。在UNIX系统上,通过根据当前用户目录分析某一相对路径名,可使该路径名成为绝对路径名。在MicrosoftWindows系统上,通过由路径名指定的当前驱动器目录(如果有)来分析某一相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录来分析它。


返回:
绝对路径名字符串,它与此抽象路径名表示相同的文件或目录的
抛出:
SecurityException
-如果无法访问所需的系统属性值。
另请参见:
isAbsolute()

getCanonicalPath
publicStringgetCanonicalPath()
throwsIOException返回抽象路径名的规范路径名字符串。
规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换成绝对路径名,这与调用getAbsolutePath()方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称(比如
".""..")、分析符号连接(对于UNIX平台),以及将驱动器名转换成标准大小写形式(对于MicrosoftWindows平台)。

表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。


返回:
表示与此抽象路径名相同的文件或目录的规范路径名字符串
抛出:
IOException
-如果发生I/O错误(可能是因为构造规范路径名需要进行文件系统查询)
SecurityException
-如果无法访问所需的系统属性值,或者存在安全管理器,且其SecurityManager.checkRead(java.io.FileDescriptor)方法拒绝对该文件进行读取访问
从以下版本开始:
JDK1.
1

二、例子:
1,getPath()与getAbsolutePath()的区别
publicstaticvoidtest1(){
Filefile1
=newFile(".\\test1.txt");
Filefile2
=newFile("D:\\workspace\\test\\test1.txt");
System.out.println(
"-----默认相对路径:取得路径不同------");
System.out.println(file1.getPath());
System.out.println(file1.getAbsolutePath());
System.out.println(
"-----默认绝对路径:取得路径相同------");
System.out.println(file2.getPath());
System.out.println(file2.getAbsolutePath());

}

得到的结果:
-----默认相对路径:取得路径不同------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默认绝对路径:取得路径相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt
因为getPath()得到的是构造file的时候的路径。
getAbsolutePath()得到的是全路径
如果构造的时候就是全路径那直接返回全路径
如果构造的时候试相对路径,返回当前目录的路径+构造file时候的路径

2,getAbsolutePath()和getCanonicalPath()的不同
publicstaticvoidtest2()throwsException{
Filefile
=newFile("..\\src\\test1.txt");
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
得到的结果
D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt
可以看到CanonicalPath不但是全路径,而且把..或者.这样的符号解析出来。
3,getCanonicalPath()和自己的不同。
就是解释这段话:
表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。
单下边这段代码是看不到结果的,要配合一定的操作来看。下边操作步骤,同时讲解

publicstaticvoidtest3()throwsException{
Filefile
=newFile("D:\\Text.txt");
System.out.println(file.getCanonicalPath());
}
步骤:
确定你的系统是Windows系统。
(1),确定D盘下没有Text.txt这个文件,直接执行这段代码,得到的结果是:
D:\Text.txt
注意这里试大写的Text.txt
(2)在D盘下建立一个文件,名叫text.txt,再次执行代码,得到结果
D:\text.txt
同样的代码得到不同的结果。
同时可以对比getAbsolutePath()看看,这个得到的结果是一样的。

原因:
window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,所以在windows上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。

三、最后:
1,尝试在linux下执行上边的步骤,两次打印的结果是相同的,因为linux是大小写敏感的系统。
2,手动删掉test.txt,然后尝试执行下边代码
publicstaticvoidtest4()throwsException{
Filefile
=newFile("D:\\Text.txt");
System.out.println(file.getCanonicalPath());
Filefile1
=newFile("D:\\text.txt");
file1.createNewFile();
file
=newFile("D:\\Text.txt");
System.out.println(file.getCanonicalPath());
}

publicstaticvoidtest3()throwsException{
Filefile1
=newFile("D:\\text.txt");
file1.createNewFile();
Filefile
=newFile("D:\\Text.txt");
System.out.println(file.getCanonicalPath());
}

执行上边两个函数,看看结果,然后思考一下为什么?
1,的结果是两个大写,
2,的结果试两个小写
连续两个大写的,是否跟上边的矛盾 ?
这是因为虚拟机的缓存机制造成的。第一次Filefile=newFile("D:\\Text.txt");决定了结果.

原文地址:http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html


分享到:
评论

相关推荐

    Java基础知识小结

    1.2 file的getPath getAbsolutePath和getCanonicalPath的不同 . . . . . . .5 1.3 int String 互转的多种方法 . . . . . . . . . . . . . . . . . . . . . 10 1.4 JAVA注释方法及格式 . . . . . . . . . . . . . . ....

    Java中getPath与getAbsolutePath区别.pdf

    Java中getPath与getAbsolutePath区别.pdf

    java 文件处理代码

    import java.io.File; import java.util.Date; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TT { private static final long serialVersionUID = ...

    详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    下面小编就为大家带来一篇详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java File类的一些知识

    File的getPath_getAbsolutePath和getCanonicalPath的不同

    测试文件(java版)

    import java.io.File; class FileTest { public static void main(String[] args) { if(args.length==0){ System.out.println("运行该程序时,请输入以下格式的命令:"); System.out.println("java FileTest ...

    Struts Updownload 源码

    给出其中一个Action 包中含有整个框架的源码 package com.icss.action; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java...

    org.apache.tools.zip解决解压乱码问题

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util....

    java压缩文件源码--ZipUtils

    import java.io.*; import java.util.*; import java.util.zip.Adler32; import java.util.zip.CheckedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip....

    swing文件拖拽

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.swing.Icon; import ...

    线下培训系统

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; import javax.swing.JButton; import javax.swing.JFileChooser...

    IO输入输出留

    java.io.File ============================================================================================ *表示磁盘文件或目录的路径 *可以表示一个不存在的路径 创建实例 -------------------------------...

    带注释的Bootstrap.java

    import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import...

    ueditor-1.4.3_utf8_修正版本(解决windows下在线图库及上传图问题)

    com.baidu.ueditor.hunter下的FileManager.java中的getPath()方法,也可自己下载原版反编译该class后在放到jar包里,方法修改如下: private String getPath(File file) { String path = file.getAbsolutePath()...

    Java路径问题解决方案汇集

    Java路径中的空格问题  1、 URLTest.class.getResource(/).getPath();  URLTest.class.getResource(/).getFile();  URLTest.class.getClassLoader().getResource().getPath();  Thread.current...

    office在线查看

    import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import com.artofsolving.jodconverter.DocumentConverter; import ...

    inotify-java-2.0.2.jar

    java用于监控Linux下文件变化的工具包,包含文件写完成事件,使用方法: Inotify i = new Inotify(); int wd = i.addWatch(dir.getPath(), Close_Write); i.addListener(wd, new InotifyEventListener() { //实现 }...

Global site tag (gtag.js) - Google Analytics