IO系統_File類分析

     File類:文件和目錄路徑名的抽象表示形式,它的對象並不是一個硬盤上面的文件或者目錄,他只是一個抽象路徑名,可以與對應路徑名的文件或者目錄關聯,對硬盤文件或者目錄進行相關的操作。當硬盤上面還沒有對應的文件或者文件夾實體時,這個File對象只能操作路徑名字符串相關的東西,對應實體文件或者文件夾的屬性的是無法獲取的。不過可以通過File對象的CreatNewFile、mkdir等等方法在硬盤上面創建對應的實體,然後操作對應實體的屬性,如內容、創建日期、可讀寫等等。

   總體來說,一個File對象由下面10個方面的字段、構造器和方法組成,裏面的成員都是常用成員。對應硬盤上面的文件或者文件夾,我暫時稱之爲File實體(外存),而抽象路徑名稱之爲File對象(內存)。


1:Filed(字段):
①static private FileSystem fs = FileSystem.getFileSystem();
 獲取本地平臺的文件系統,這個與對應的操作系統有關了,好像對File實體的操作,都需要用到這個對象
②private String path:
構造File對象時,將File對象的抽象路徑名字符串賦給了path,對應的抽象路徑名的操作,比如文件名、父目錄等等都需要用path對象,就連File對象的toString方法,也是將path值返回給toString。


③名稱分隔符:
public static final char separatorChar = fs.getSeparator();
public static final String separator = "" + separatorChar;
separatorChar在windows下是'\\',在UNIX上是'/',separator只是將對象的字符變成了字符串。例如:"D:\\a\\b.txt  和"/a/b.txt
④路徑分隔符:
public static final char pathSeparatorChar = fs.getPathSeparator();
ublic static final String pathSeparator = "" + pathSeparatorChar;
Windows下面是';',即分號,UNIX上面是':',即冒號,這個和上面的名稱分隔符可能容易混淆,舉個例子就容易明白了。windows下面 D:\\a.txt;F:\\b.txt; 這兩個抽象路徑名之間用分號隔開




2、Constructors(構造器):
File的構造函數有還幾個,共同點就是:首先從參數中獲取一個路徑名字符串,然後對字符串進行校驗,看符不符合路徑名要求,符合的話就將路徑名賦值給path,這個path就是原始的字符串數據;如果構造參數的路徑名是a.txt,那麼path也等於a.txt。也就是說,構造器
只是將符合要求的字符串路徑原封不動的賦給path。以後對路徑名的操作,也是操作path了。比如a.txt路徑,調用其getParent,獲得的就是一個null了


3、Path-component accessors(path組件訪問):
public String getName()
public String getParent()
public File getParentFile()
public String getPath()
以上4個方法,都是基本path字符串的操作,這個字符串是什麼樣的,得到的結果就是對應上面樣的,例如path=a.txt,那麼getName()=
a.txt  getParent=null;getParentFile=null;getPath=path


4、Path operations(path組件操作):將path值放到對應的操作系統上面進行處理。
①public boolean isAbsolute():依據對應的平臺,看path的值是否是絕對路徑,比如windows裏面以盤符開頭如D:,而UNIX以 /開頭
②public String getAbsolutePath():如果path是絕對路徑,直接放回,如果不是,還要根據對應的操作系統獲得當前目錄值,並加到前面去,將結果返回來
③public File getAbsoluteFile()這是在上面的操作基礎上,將返回的絕對路徑值包裝成一個File對象
④public String getCanonicalPath():規範路徑名字符串,它與此抽象路徑名錶示相同的文件或目錄,例如:windows裏面路徑名標準中,盤符要大小,當我們寫錯小寫的cdef時,會被轉換成標準的寫法
⑤public File getCanonicalFile():返回由標準形式包裝成的File
⑥public URI toURI():構造一個表示此抽象路徑名的 file: URI。 


5、Attribute accessors(屬性訪問器):這一部分的方法,主要是對File實體(硬盤文件/目錄)的屬性進行訪問操作。共同點:當File實體不存在是,它們都返回false;
public boolean canRead() :是否可讀,當File實體不存在或者File實體設置了不能讀時,返回false
public boolean canWrite():是否可寫
public boolean exists():File實體是否存在
public boolean isDirectory():判斷是否是目錄
public boolean isFile() :是否是標準文件
public boolean isHidden():是否是隱藏文件,很多隱藏文件無法進行很多其他的操作,需要之前確認一下它是否是隱藏文件,比如說刪除。
public long lastModified():最近修改時間
public long length():返回由此抽象路徑名錶示的文件的長度。如果此路徑名錶示一個目錄,則返回值是不確定的。 


6File operations(File實體的操作):這一部分的方法比較多,
主要有①創建或刪除文件和目錄:
   ②返回目錄的下層信息:下層目錄和文件
  ③設置文件的屬性:名稱、讀寫性、執行性、時間等待
這些方法的共同點是,硬盤文件必須存在(除了創建刪除文件),否則出現nullPointException異常。
public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()
public boolean delete()
public void deleteOnExit()


public String[] list()
public String[] list(FilenameFilter filter)
public File[] listFiles()
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)


public boolean renameTo(File dest):類似於文件的移動
public boolean setLastModified
 public boolean setReadOnly()
public boolean setWritable(boolean writable, boolean ownerOnly)
 public boolean setWritable(boolean writable)
 public boolean setReadable(boolean readable, boolean ownerOnly)
 public boolean setReadable(boolean readable)
public boolean setExecutable(boolean executable, boolean ownerOnly)
public boolean setExecutable(boolean executable)
public boolean canExecute()


7、Filesystem interface:
public static File[] listRoots():列出可用的文件系統根,比如Windows返回所有的根目錄就是盤符號了:C:\ D:\等等了


8、Disk usage:獲取硬盤的使用情況,比如大小、空閒、可以的
public long getTotalSpace():此抽象路徑名所在分區的總大小,單位字節
public long getFreeSpace():此抽象路徑名所在分區的未分配空間大小,單位字節
 public long getUsableSpace():返回此抽象路徑名指定的分區上可用於此虛擬機的字節數


9 、Temporary files:臨時文件指的是程序運行階段存在,程序退出時,就刪除的文件


①public static File createTempFile(String prefix, String suffix, File directory):在指定目錄創建一個臨時文件
②public static File createTempFile(String prefix, String suffix):在當前目錄創建一個臨時文件


10、Basic infrastructure基礎的設施
①public int compareTo(File pathname):File實現Comparable<File>接口的方法
②public boolean equals(Object obj):覆蓋equals方法,對兩個③File對象進行比較,看是否相等
④public int hashCode():
⑤ public String toString() {return getPath();}:直接返回了path的值


發佈了31 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章