不同的操作系统对于档案系统路径的设定各有差别,例如在Windows中,一个路径的表示法可能是:
"c:\\Windows\\Fonts\\"
而在Linux下的路径设定可能是:
"/home/justin/"
Windows的路径指定是使用UNC(Universal Naming Convention)路径名,以\\开始表示磁盘根目录,如果没有以\\开始表示相对路径,c是可选的磁盘指定,后面跟随着 : 字符。而UNIX-Like系统的路径指定以 / 开始表示绝对路径,不以 / 开始表示相对路径。
因而在程序中设定路径时会有系统相依性的问题,File类别提供一个抽象的、与系统独立的路径表示,您给它一个路径字符串,它会将它转换为与系统无关的抽象路径表示,这个路径可以指向一个档案、目录或是URI,您可以用以下四种方式来建构File的实例:
File(File parent, String child) File(String pathname) File(String parent, String child) File(URI uri)
一个File的实例被建立时,它就不能再被改变内容;File类别除了用来表示一个档案或目录的抽象表示之外,它还提供了不少相关操作方法,您可以用它来对档案系统作一些查询与设定的动作。
来看个简单的程序:
package onlyfun.caterpillar;
import java.io.*;
import java.util.*;
public class FileDemo {
public static void main(String[] args) {
try {
File file = new File(args[0]);
if(file.isFile()) { // 是否为档案
System.out.println(args[0] + " 档案");
System.out.print(
file.canRead() ? "可读 " : "不可读 ");
System.out.print(
file.canWrite() ? "可写 " : "不可写 ");
System.out.println(
file.length() + "字节");
}
else {
// 列出所有的档案及目录
File[] files = file.listFiles();
ArrayList fileList =
new ArrayList();
for(int i = 0; i < files.length; i++) {
// 先列出目录
if(files[i].isDirectory()) { //是否为目录
// 取得路径名
System.out.println("[" +
files[i].getPath() + "]");
}
else {
// 档案先存入fileList,待会再列出
fileList.add(files[i]);
}
}
// 列出档案
for(File f: fileList) {
System.out.println(f.toString());
}
System.out.println();
}
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileDemo pathname");
}
}
}
执行结果:
java onlyfun.caterpillar.FileDemo C:\ [C:\WINDOWS] [C:\Documents and Settings] [C:\Program Files] [C:\System Volume Information] [C:\Recycled] C:\A3N_A3L.10 C:\bootfont.bin C:\ntldr C:\NTDETECT.COM C:\boot.ini C:\CONFIG.SYS C:\AUTOEXEC.BAT C:\IO.SYS C:\MSDOS.SYS C:\Finish.log C:\pagefile.sys C:\VIRTPART.DAT