不同的作業系統對於檔案系統路徑的設定各有差別,例如在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
|
|