Java资源的定位方式


本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

 

 

I/O操作在Java中是必须掌握的技术,其中文件的定位问题就极容易引起思维上的混乱。如下例:

File f1 = new File("/test.txt");
File f2 = new File("test.txt");

我们将“/”开头的路径称为绝对路径,将非“/”开头的路径称为相对路径。那么上面的绝对路径及相对路径又分别定位到哪一个文件上了呢?

 

要想掌握文件的定位问题,须了解以下几个概念:
1. 文件系统的根目录
在Windows下,每一个分区的根目录(如C:/ D:/ E:/)都是我们所说的文件系统的根目录;在UNIX下,"/"就是文件系统的根目录。
2. 程序运行的工作目录
一个带有静态main函数的Java类,需要使用java命令才能够执行,我们将执行java命令时所处的目录称为工作目录。
3. 类路径(classpath)
类路径指的是Java类所在包的根目录。
4. 包路径
通常Java类都有自己的包,在文件系统中,Java类的包以目录的方式表现。一个Java类所在的目录称为这个类的包路径。

 

假如,一个cn.net.uglyduck.test.Test类(类名:Test,包名:cn.net.uglyduck.test)的类路径
    C:/project/bin
则Test类的包路径则为
    C:/project/bin/cn/net/uglyduck/test
如果我们的工作目录类路径相同,则执行Java程序时,不用指定classpath。如:
    C:/project/bin>java  cn.net.uglyduck.test.Test
如果工作目录类路径不同,则执行Java程序时需要指定classpath。如:
    C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

 

在Java中定位资源文件的常用方式有两种:文件系统定位方式与类路径定位方式。
所谓文件系统定位就是以文件系统的根目录为绝对路径,以程序运行的工作目录为相对路径进行资源定位。Java中最常用的以文件系统定位方式进行处理的类包括File、FileInputStream和FileOutputStream。

 

例如Test类的定义如下:

import java.io.File; public class Test { public static void main(String[] args) { File f1 = new File("/test1.txt"); File f2 = new File("test2.txt"); System.out.println("/test1.txt --> " + f1.getAbsolutePath()); System.out.println("test2.txt --> " + f2.getAbsolutePath()); } }  

如果Test类的类路径为C:/project/bin,我们在C:/project下执行程序,命令行如下:

C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

得到的结果是:

/test1.txt --> C:/test1.txt
test2.txt  --> C:/project/test2.txt

所谓类路径定位就是以类路径为绝对路径,以包路径为相对路径进行资源定位。Java类的静态方法getResource或getResourceAsStream就是以类路径的方式进行资源定位。

 

例如Test类的定义做如下修改:

package cn.net.uglyduck.test; import java.net.URL; public class Test { public static void main(String[] args) { URL url1 = Test.class.getResource("/test1.txt"); URL url2 = Test.class.getResource("test2.txt"); System.out.println("/test1.txt --> " + url1); System.out.println("test2.txt --> " + url2); } }

如果Test类的类路径为C:/project/bin,我们在C:/project下执行程序,命令行如下:

C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

得到的结果是:

/test1.txt --> file:/C:/project/bin/test1.txt
test2.txt  --> file:/C:/project/bin/cn/net/uglyduck/test/test2.txt

 

 

你可能感兴趣的:(java,c,工作,File,url,import)