Tinysun
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 134,comments - 22,trackbacks - 0
<
2009年3月
>
日
一
二
三
四
五
六
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
我参与的团队
ica推荐系统(0/0)
随笔分类
Algorithm and Data Structure(9)
C/C++(38)
GNU Linux/Unix(35)
J2SE(10)
Java开源(1)
Linux 多线程(4)
Microsoft Dynamic AX(2)
VC++/MFC(3)
Win32API 编程(2)
XML相关(1)
其他(9)
数据库和SQL (10)
新技术新概念(1)
设计模式(1)
随笔档案
2012年8月 (1)
2012年2月 (1)
2011年5月 (1)
2011年1月 (3)
2010年11月 (1)
2010年10月 (6)
2010年9月 (12)
2010年8月 (12)
2010年7月 (6)
2010年6月 (4)
2010年5月 (19)
2010年4月 (4)
2010年3月 (2)
2010年2月 (7)
2010年1月 (1)
2009年12月 (16)
2009年11月 (6)
2009年5月 (1)
2009年4月 (4)
2009年3月 (8)
2009年2月 (8)
2009年1月 (1)
2008年12月 (1)
2008年11月 (5)
2008年10月 (2)
2008年5月 (2)
2008年3月 (1)
收藏夹
C/C++(1)
Java(1)
C++ 社区
artima developer
C plus plus
drdobbs
Lippman
常用网站
CodeProject
VC知识库
搜索
最新评论
1. re: vi使用技巧(二):copy,paste,delete,块编辑,redo/undo
学无止境。
--jtony
2. re: 中英文网页中双语语料的挖掘
你的软件卖吗?请加我qq
:1679461908
--tm
3. re: 中英文网页中双语语料的挖掘
可否加我,qq: 1679461908
--tm
4. re: 中文分词免费源码资源
中文分词免费源码资源
--8888
5. re: 全文检索的基本原理
懂点了。
人工智能
--谢谢分享
阅读排行榜
1. 大端法、小端法、网络字节序 转(31349)
2. 均方根值(RMS)、均方根误差(RMSE)、各种平均值 (16950)
3. vi使用技巧(二):copy,paste,delete,块编辑,redo/undo(12321)
4. MFC下关于“建立空文档失败”问题的分析(转载)(9104)
5. linux下which、whereis、locate、find 命令的区别(5119)
评论排行榜
1. PL/X编译器设计与实现(9)
2. 利用牛顿迭代法求平方根(转)(4)
3. 中英文网页中双语语料的挖掘(3)
4. 全文检索的基本原理(1)
5. 用户态非抢占式线程库实现 (转)(1)
file的getPath getAbsolutePath和getCanonicalPath的不同
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
"
);决定了结果.
来至javaeye
posted on 2009-03-05 10:17
何克勤
阅读(244)
评论(0)
编辑
收藏
所属分类:
J2SE
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
线程中释放锁的方式
Java线程
just-in-time编译器
file的getPath getAbsolutePath和getCanonicalPath的不同
protected访问权限
关联、组合、聚合、依赖关系比较
比较分析Vector、ArrayList和hashtable hashmap数据结构
[转]Java RPC通信机制之RMI
(转)Java中URI,URL和URN的使用
关于java连接sql server 2000的问题