`

【杂谈】关于文件路径方面的小麻烦

阅读更多

写程序的时候经常引用外部资源,这个时候通过文件路径定位就相当重要了。

 

问题提出

       在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两个路径截然不同

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics