写程序的时候经常引用外部资源,这个时候通过文件路径定位就相当重要了。
问题提出
在Eclipse工程中写一段代码,想要调用工程中的某一个资源文件。
File file=new File("/EclipseProj/res.txt"); .... //读取文件
一运行,总是说res.txt找不到。只要将路径改成"EclipseProj/tes.txt"即可。不知为什么?
症结所在
没有搞清楚相对路径中‘ / ‘的作用,"/Director/File"与"Director/File"完全是两个不同的路径。
下面详细看看文件路径的表示。
关于文件路径的表示一般两种:绝对路径 和相对路径
1、绝对路径
很简单,举个例子 e:/everywork/cwf/WriteFree/resource.txt
这种从根目录开始一级一级目录完全表示出来的形式就是绝对路径。
2、相对路径
(1) WriteFree/resource.txt 形式
这种形式是相对与当前目录 而言的。如果你当前所在的目录是e:/everywork/cwf/,你们系统会在这个目录下寻找WriteFree/resource.txt,自然和绝对路径是一样的。当然,如果当前目录是e:/,这样就在e盘符下的第一级目录中寻找WriteFree/resource.txt,其实也就是e:/WriteFree/resource.txt。
(2) /WriteFree/resource.txt 形式
这种以 ‘/‘ 开头的相对路径形式很有迷惑性。
通常我们使用 ‘/‘ 来表示根目录 ,/WriteFree/resource.txt就表示resource.txt文件在系统的根目录上的WriteFree目录里。但是这样使用对于初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的当前目录,而是你资源所在的磁盘的根目录, 也就是所跟目录是c:/ e:/ g:/之类的。那么这种相对路径形式其实是相对于根目录而言,等同于绝对路径e:/WriteFree/resource.txt。
下面我们在Eclipse中写一个读工程内资源文件的例子来看看:
(1)用Eclipse建立一个工程WriteFree放在e:\everywork\cwf目录下,然后在工程中放入资源文件res/resource.txt
(2)在WriteFree工程下编写代码:
File f1=new File("res/resource.txt"); System.out.println("f1:"+f1.getAbsoluteFile()); File f2=new File("/res/resource.txt"); System.out.println("f2:"+f2.getAbsoluteFile()); //运行结果如下: f1: e:\everywork\cwf\WriteFree\res\resource.txt // f2: e:\res\resource.txt
(3)结果很明显,小小的差别导致f1和f2两个路径截然不同