不同的操作系统对于档案系统路径的设定各有差别,例如在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(); ArrayListfileList = 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