java之十 高階IO流
java.io定義的輸入/輸出類列於下表:
ObjectInputStream.GetField和ObjectOutputStream.PutField是Java2新添的內部類。
下面是由java.io定義的介面
FileFilter介面是Java2新增的。
java.io包中有很多類和介面。包括位元組和字元流,物件序列化(物件的儲存和釋放)。
本章講述幾個最常用的I/O成員,從最獨特的File開始。
File(檔案類)
儘管java.io定義的大多數類是實行流式操作的,File類不是。它直接處理檔案和檔案系統。也就是說,File類沒有指定資訊怎樣從檔案讀取或向檔案儲存;它描述了檔案本身的屬性。File物件用來獲取或處理與磁碟檔案相關的資訊,例如許可權,時間,日期和目錄路徑。此外,File還瀏覽子目錄層次結構。很多程式中檔案是資料的根源和目標。儘管它們在小應用程式中因為安全原因而受到嚴格限制,檔案仍是儲存固定和共享資訊的主要資源。Java中的目錄當成File對待,它具有附加的屬性——一個可以被list()方法檢測的檔名列表。
下面的建構函式可以用來生成File物件:
File(StringdirectoryPath)
File(StringdirectoryPath,Stringfilename)
File(FiledirObj,Stringfilename)
這裡,directoryPath是檔案的路徑名,filename是檔名,dirObj一個指定目錄的File物件。
下面的例子建立了三個檔案:f1,f2,和f3。第一個File物件是由僅有一個目錄路徑引數的建構函式生成的。第二個物件有兩個引數——路徑和檔名。第三個File物件的引數包括指向f1檔案的路徑及檔名。f3和f2指向相同的檔案。
Filef1=newFile("/");
Filef2=newFile("/","autoexec.bat")
Filef3=newFile(f1,"autoexec.bat");
注意:Java能正確處理UNIX和Windows/DOS約定路徑分隔符。如果在Windows版本的Java下用斜線(/),路徑處理依然正確。記住,如果你用Windows/DOS使用反斜線(\)的約定,你需要在字串內使用它的轉義序列(\\)。Java約定是用UNIX和URL風格的斜線來作路徑分隔符。
File定義了很多獲取File物件標準屬性的方法。例如getName()返回檔名,getParent()返回父目錄名,exists()在檔案存在的情況下返回true,反之返回false。然而File類是不對稱的。說它不對稱,意思是雖然存在允許驗證一個簡單檔案物件屬性的很多方法,但是沒有相應的函式來改變這些屬性。下面的例子說明了幾個File方法:
//DemonstrateFile
importjava.io.File;
classFileDemo{
staticvoidp(Strings){
System.out.println(s);
}
publicstaticvoidmain(Stringargs[])
Filef1=newFile("/java/COPYRIGHT");
p("FileName:"+f1.getName());
p("Path:"+f1.getPath());
p("AbsPath:"+f1.getAbsolutePath());
p("Parent:"+f1.getParent());
p(f1.exists()?"exists":"doesnotexist");
p(f1.canWrite()?"iswriteable":"isnotwriteable");
p(f1.canRead()?"isreadable":"isnotreadable");
p("is"+(f1.isDirectory()?"":"not"+"adirectory"));
p(f1.isFile()?"isnormalfile":"mightbeanamedpipe");
p(f1.isAbsolute()?"isabsolute":"isnotabsolute");
p("Filelastmodified:"+f1.lastModified());
p("Filesize:"+f1.length()+"Bytes");
執行該程式,你將看到下面的結果:
FileName:COPYRIGHT
Path:/java/COPYRIGHT
AbsPath:/java/COPYRIGHT
Parent:/java
exists
iswriteable
isreadable
isnotadirectory
isnormalfile
isabsolute
Filelastmodified:812465204000
Filesize:695Bytes
大多數File方法是自說明的,但isFile()和isAbsolute()不是。isFile()在被檔案呼叫時返回true,在被目錄呼叫時返回false。並且,isFile()被一些專用檔案呼叫時返回false,例如裝置驅動程式和命名管道,所以該方法可用來判定檔案是否作為檔案執行。isAbsolute()方法在檔案擁有絕對路徑時返回true,若是相對路徑則返回false。
File還包括兩個有用的實用工具方法。第一個是renameTo(),顯示如下:
booleanrenameTo(FilenewName)
這裡,由newName指定的檔名變成了所呼叫的File物件的新的名稱。如果更名成功則返回ture,檔案不能被重新命名(例如,你試圖重新命名檔案以使它從一個目錄轉到另一個目錄,或者你使用了一個已經存在的檔名),則返回false。
booleandelete()
java之十 高階IO流
java.io定義的輸入/輸出類列於下表:
ObjectInputStream.GetField和ObjectOutputStream.PutField是Java2新添的內部類。
下面是由java.io定義的介面
FileFilter介面是Java2新增的。
java.io包中有很多類和介面。包括位元組和字元流,物件序列化(物件的儲存和釋放)。
本章講述幾個最常用的I/O成員,從最獨特的File開始。
File(檔案類)
儘管java.io定義的大多數類是實行流式操作的,File類不是。它直接處理檔案和檔案系統。也就是說,File類沒有指定資訊怎樣從檔案讀取或向檔案儲存;它描述了檔案本身的屬性。File物件用來獲取或處理與磁碟檔案相關的資訊,例如許可權,時間,日期和目錄路徑。此外,File還瀏覽子目錄層次結構。很多程式中檔案是資料的根源和目標。儘管它們在小應用程式中因為安全原因而受到嚴格限制,檔案仍是儲存固定和共享資訊的主要資源。Java中的目錄當成File對待,它具有附加的屬性——一個可以被list()方法檢測的檔名列表。
下面的建構函式可以用來生成File物件:
File(StringdirectoryPath)
File(StringdirectoryPath,Stringfilename)
File(FiledirObj,Stringfilename)
這裡,directoryPath是檔案的路徑名,filename是檔名,dirObj一個指定目錄的File物件。
下面的例子建立了三個檔案:f1,f2,和f3。第一個File物件是由僅有一個目錄路徑引數的建構函式生成的。第二個物件有兩個引數——路徑和檔名。第三個File物件的引數包括指向f1檔案的路徑及檔名。f3和f2指向相同的檔案。
Filef1=newFile("/");
Filef2=newFile("/","autoexec.bat")
Filef3=newFile(f1,"autoexec.bat");
注意:Java能正確處理UNIX和Windows/DOS約定路徑分隔符。如果在Windows版本的Java下用斜線(/),路徑處理依然正確。記住,如果你用Windows/DOS使用反斜線(\)的約定,你需要在字串內使用它的轉義序列(\\)。Java約定是用UNIX和URL風格的斜線來作路徑分隔符。
File定義了很多獲取File物件標準屬性的方法。例如getName()返回檔名,getParent()返回父目錄名,exists()在檔案存在的情況下返回true,反之返回false。然而File類是不對稱的。說它不對稱,意思是雖然存在允許驗證一個簡單檔案物件屬性的很多方法,但是沒有相應的函式來改變這些屬性。下面的例子說明了幾個File方法:
//DemonstrateFile
importjava.io.File;
classFileDemo{
staticvoidp(Strings){
System.out.println(s);
}
publicstaticvoidmain(Stringargs[])
Filef1=newFile("/java/COPYRIGHT");
p("FileName:"+f1.getName());
p("Path:"+f1.getPath());
p("AbsPath:"+f1.getAbsolutePath());
p("Parent:"+f1.getParent());
p(f1.exists()?"exists":"doesnotexist");
p(f1.canWrite()?"iswriteable":"isnotwriteable");
p(f1.canRead()?"isreadable":"isnotreadable");
p("is"+(f1.isDirectory()?"":"not"+"adirectory"));
p(f1.isFile()?"isnormalfile":"mightbeanamedpipe");
p(f1.isAbsolute()?"isabsolute":"isnotabsolute");
p("Filelastmodified:"+f1.lastModified());
p("Filesize:"+f1.length()+"Bytes");
}
}
執行該程式,你將看到下面的結果:
FileName:COPYRIGHT
Path:/java/COPYRIGHT
AbsPath:/java/COPYRIGHT
Parent:/java
exists
iswriteable
isreadable
isnotadirectory
isnormalfile
isabsolute
Filelastmodified:812465204000
Filesize:695Bytes
大多數File方法是自說明的,但isFile()和isAbsolute()不是。isFile()在被檔案呼叫時返回true,在被目錄呼叫時返回false。並且,isFile()被一些專用檔案呼叫時返回false,例如裝置驅動程式和命名管道,所以該方法可用來判定檔案是否作為檔案執行。isAbsolute()方法在檔案擁有絕對路徑時返回true,若是相對路徑則返回false。
File還包括兩個有用的實用工具方法。第一個是renameTo(),顯示如下:
booleanrenameTo(FilenewName)
這裡,由newName指定的檔名變成了所呼叫的File物件的新的名稱。如果更名成功則返回ture,檔案不能被重新命名(例如,你試圖重新命名檔案以使它從一個目錄轉到另一個目錄,或者你使用了一個已經存在的檔名),則返回false。
booleandelete()