首頁>Club>
7
回覆列表
  • 1 # 使用者834195712159

    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()

  • 中秋節和大豐收的關聯?
  • 十四五食品安全規劃內容全文?