不同的作业系统对于文件系统路径的设定各有差别,例如在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<File> fileList = new ArrayList<File>(); 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
|
|