File类并不只仅是对现有目次路径、文件可能文件组的一个暗示。亦可用一个File工具新建一个目次,甚至建设一个完整的目次路径——如果它尚不存在的话。亦可用它相识文件的属性(长度、上一次修他日期、读/写属性等),查抄一个File工具到底代表一个文件照旧一个目次,以及删除一个文件等等。下列措施完整展示了如何运用File类剩下的这些要领:
//: MakeDirectories.java // Demonstrates the use of the File class to // create directories and manipulate files. import java.io.*; public class MakeDirectories { private final static String usage = "Usage:MakeDirectories path1 ...\n" + "Creates each path\n" + "Usage:MakeDirectories -d path1 ...\n" + "Deletes each path\n" + "Usage:MakeDirectories -r path1 path2\n" + "Renames from path1 to path2\n"; private static void usage() { System.err.println(usage); System.exit(1); } private static void fileData(File f) { System.out.println( "Absolute path: " + f.getAbsolutePath() + "\n Can read: " + f.canRead() + "\n Can write: " + f.canWrite() + "\n getName: " + f.getName() + "\n getParent: " + f.getParent() + "\n getPath: " + f.getPath() + "\n length: " + f.length() + "\n lastModified: " + f.lastModified()); if(f.isFile()) System.out.println("it's a file"); else if(f.isDirectory()) System.out.println("it's a directory"); } public static void main(String[] args) { if(args.length < 1) usage(); if(args[0].equals("-r")) { if(args.length != 3) usage(); File old = new File(args[1]), rname = new File(args[2]); old.renameTo(rname); fileData(old); fileData(rname); return; // Exit main } int count = 0; boolean del = false; if(args[0].equals("-d")) { count++; del = true; } for( ; count < args.length; count++) { File f = new File(args[count]); if(f.exists()) { System.out.println(f + " exists"); if(del) { System.out.println("deleting..." + f); f.delete(); } } else { // Doesn't exist if(!del) { f.mkdirs(); System.out.println("created " + f); } } fileData(f); } } } ///:~
在fileData()中,可看到应用了各类文件观测要领来显示与文件或目次路径有关的信息。
main()应用的第一个要领是renameTo(),操作它可以重定名(或移动)一个文件至一个全新的路径(该路径由参数抉择),它属于另一个File工具。这也合用于任何长度的目次。
若试验上述措施,就可发明本身能建造任意庞洪水平的一个目次路径,因为mkdirs()会帮我们完成所有事情。在Java 1.0中,-d符号陈诉目次固然已被删除,但它依然存在;但在Java 1.1中,目次会被实际删除。