键盘上的舞者

像写情书一样Coding...

用户操作
[即时聊天] [发私信] [加为好友]
陈维ID:chenweionline
67283次访问,排名1531好友11人,关注者0
专注 Java Desktop 技术,多年 Java GUI 开发经验。
chenweionline的文章
原创 55 篇
翻译 0 篇
转载 19 篇
评论 141 篇
键盘上的舞者的公告

专注 JAVA Desktop 技术

简单做到极致

最近评论
zhangping:你好,我想我大约是遇上了和你同样的问题。

我的问题是:

我这里有一些java源文件,其中有些注释是日文写的。
在日文操作系统中,运行没有问题,但是在中文操作系统中

用NetBeans6.1重新建立工程,进行Build的时候,会报错和警告:



* <p>&……
兴趣:THS,能否介绍一些资料。
兴趣:如果采用JAVA, 它这方面的功能足够了吗?
兴趣:如果采用JAVA, 它这方面的功能足够了吗?
SunShine:哇~~帅呆了
文章分类
收藏
    相册
    ChinaJoy 2008
    女魔头
    上海浦东软件园
    养在深闺人未识
    Favorite
    Apple-NaNa
    CnGadGet
    NOTCOT.ORG
    虚拟无忌
    技术
    Geertjan's Weblog
    java.net forums
    Let's Swing Java
    Mac Java Community
    NetBeans Rich Client Application (RCP)
    NetBeans星球
    open open
    朋友
    Christina
    企鹅博士
    地平线上
    阿憨月经
    非上上智
    资源
    balloontip
    bluemarine
    JAI
    JAI-ImageIO
    JMONKEYENGINE
    jna
    jrawio
    metadata extraction in java
    pdf-renderer
    QuickTime for Java
    swinglabs
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 介绍一个 Java examples 资源丰富的网站 | 旧一篇: 300 new features, where's java 6?

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

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

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

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


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

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

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


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

    二、例子:
    1,getPath()与getAbsolutePath()的区别
    public static void test1(){
            File file1 
    = new File(".\\test1.txt");
            File file2 
    = new File("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()的不同
    public static void test2() throws Exception{
            File file 
    = new File("..\\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()和自己的不同。
    就是解释这段话:
    表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。 
    单下边这段代码是看不到结果的,要配合一定的操作来看。下边操作步骤,同时讲解

    public static void test3() throws Exception{
            File file 
    = new File("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,然后尝试执行下边代码
    public static void test4() throws Exception{
            File file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
            File file1 
    = new File("D:\\text.txt");
            file1.createNewFile();
            file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
        }

    public static void test3() throws Exception{
            File file1 
    = new File("D:\\text.txt");
            file1.createNewFile();
            File file 
    = new File("D:\\Text.txt");
            System.out.println(file.getCanonicalPath());
        }

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

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


    发表于 @ 2007年10月30日 13:37:00|评论(loading...)|收藏

    新一篇: 介绍一个 Java examples 资源丰富的网站 | 旧一篇: 300 new features, where's java 6?

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 键盘上的舞者