第一個名稱是 目錄名,第一個名稱以後每一個名稱表示一個目錄,最後一個名稱既能夠是目錄,也能夠是名稱
空 抽象路徑名沒有前綴和名稱序列
|
File(File parent, String child) 根據 parent 抽象路徑名和 child 路徑名字符串建立一個新 File 實例。 |
File(String pathname) 經過將給定路徑名字符串轉換爲抽象路徑名來建立一個新 File 實例。 |
File(String parent, String child) 根據 parent 路徑名字符串和 child 路徑名字符串建立一個新 File 實例。 |
File(URI uri) 經過將給定的 file: URI 轉換爲一個抽象路徑名來建立一個新的 File 實例。 |
File file = new File("D:\\testFile");//file就是對這個路徑的一個描述,那麼是否真的存在? 你還須要進行去驗證 |
separatorChar public static final char separatorChar |
與系統有關的默認名稱分隔符。
此字段被初始化爲包含系統屬性 file.separator 值的第一個字符。
在 UNIX 系統上,此字段的值爲 '/';在 Microsoft Windows 系統上,它爲 '\\'。
|
separator public static final String separator |
與系統有關的默認名稱分隔符,爲了方便,它被表示爲一個字符串。此字符串只包含一個字符,即 separatorChar。 |
pathSeparatorChar public static final char pathSeparatorChar |
與系統有關的路徑分隔符。 此字段被初始爲包含系統屬性 path.separator 值的第一個字符。 此字符用於分隔以路徑列表 形式給定的文件序列中的文件名。 在 UNIX 系統上,此字段爲 ':';在 Microsoft Windows 系統上,它爲 ';'。 |
pathSeparator public static final String pathSeparator |
與系統有關的路徑分隔符,爲了方便,它被表示爲一個字符串。
此字符串只包含一個字符,即 pathSeparatorChar。
|
文件自身屬性讀取 |
getName()
getParent()
getParentFile()
getPath()
isHidden()
lastModified()
length()
isAbsolute()
isDirectory()
isFile()
exists()
getAbsoluteFile()
getAbsolutePath()
getCanonicalFile()
getCanonicalPath()
getFreeSpace()
getTotalSpace()
getUsableSpace()
|
建立文件/目錄基本操做
|
mkdir()
mkdirs()
delete()
deleteOnExit()
renameTo(File)
createTempFile(String, String)
createTempFile(String, String, File)
createNewFile()
|
文件/目錄 列表讀取 |
listRoots()
list()
list(FilenameFilter)
listFiles()
listFiles(FileFilter)
listFiles(FilenameFilter)
|
文件權限訪問以及文件信息設置 |
canExecute()
canRead()
canWrite()
setExecutable(boolean)
setExecutable(boolean, boolean)
setReadable(boolean)
setReadable(boolean, boolean)
setReadOnly()
setWritable(boolean)
setWritable(boolean, boolean)
setLastModified(long)
|
其餘 |
toPath()
toString()
toURI()
equals(Object)
compareTo(File)
hashCode()
|
public String getName() | 返回由此抽象路徑名錶示的文件或目錄的名稱。 該名稱是路徑名名稱序列中的最後一個名稱。若是路徑名名稱序列爲空,則返回空字符串。 測試信息: getName(): cccc.txt |
public String getParent() | 返回此抽象路徑名父目錄的路徑名字符串; 若是此路徑名沒有指定父目錄,則返回 null。 getParent(): D:\testFile |
public File getParentFile() | public String getParent() 的File形式,等同於new File(getParent()) |
public String getPath() | 將此抽象路徑名轉換爲一個路徑名字符串。 所得字符串使用 默認名稱分隔符 分隔名稱序列中的名稱。 |
public boolean isHidden() | 是否隱藏文件 測試此抽象路徑名指定的文件是不是一個隱藏文件。 隱藏 的具體定義與系統有關 |
public long lastModified()
|
long 毫秒數 表示文件最後一次被修改的時間的 long 值, 用與時間點(1970 年 1 月 1 日,00:00:00 GMT)之間的毫秒數表示; 若是該文件不存在,或者發生 I/O 錯誤,則返回 0L |
public long length() | 長度,字節 返回由此抽象路徑名錶示的文件的長度。 若是此路徑名錶示一個目錄,則返回值是不肯定的。
此抽象路徑名錶示的文件的長度,以字節爲單位;
若是文件不存在,則返回 0L。
對於表示特定於系統的實體(好比設備或管道)的路徑名,某些操做系統可能返回 0L。
|
public boolean isAbsolute() |
是否絕對路徑
測試此抽象路徑名是否爲絕對路徑名。絕對路徑名的定義與系統有關。
在 UNIX 系統上,若是路徑名的前綴是 "/",那麼該路徑名是絕對路徑名。
在 Microsoft Windows 系統上,
若是路徑名的前綴是後跟 "\\" 的盤符,或者是 "\\\\",那麼該路徑名是絕對路徑名。
|
public boolean isDirectory() | 當且僅當此抽象路徑名錶示的文件存在且 是一個目錄時,返回 true;不然返回 false |
public boolean isFile() | 當且僅當此抽象路徑名錶示的文件存在且 是一個標準文件時,返回 true;不然返回 false |
public boolean exists() | 當且僅當此抽象路徑名錶示的文件或目錄存在時,返回 true;不然返回 false |
public String getAbsolutePath() | 絕對路徑名字符串,它與此抽象路徑名錶示相同的文件或目錄 |
public File getAbsoluteFile()
|
絕對 抽象路徑名,它與此抽象路徑名錶示相同的文件或目錄 至關於new File(this.getAbsolutePath())
|
public String getCanonicalPath()
throws IOException
|
規範路徑名字符串,它與此抽象路徑名錶示相同的文件或目錄
|
public File getCanonicalFile()
throws IOException
|
等同於 new File(this.getCanonicalPath()) |
public long getFreeSpace()
public long getTotalSpace()
public long getUsableSpace()
|
返回此抽象路徑名指定的分區中空間相關的數據信息,必定注意是抽象路徑名指定的分區 未分配 /所有/已使用 空間狀況 單位是字節數 |
mkdir()
|
建立此抽象路徑名指定的目錄,當且僅當已建立目錄時,返回 true;不然返回 false |
mkdirs() | 建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。 注意,此操做失敗時也可能已經成功地建立了一部分必需的父目錄。 |
public boolean renameTo(File dest) | 從新命名此抽象路徑名錶示的文件。 參數爲File
此方法行爲的許多方面都是與平臺有關的:重命名操做沒法將一個文件從一個文件系統移動到另外一個文件系統,
該操做不是不可分的,若是已經存在具備目標抽象路徑名的文件,那麼該操做可能沒法得到成功。
應該始終檢查返回值,以確保重命名操做成功。
|
public boolean delete() | 刪除此抽象路徑名錶示的文件或目錄。若是此路徑名錶示一個目錄,則該目錄必須爲空才能刪除。
當且僅當成功刪除文件或目錄時,返回 true;不然返回 false
|
public void deleteOnExit() |
在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。
文件(或目錄)將以與註冊相反的順序刪除。
調用此方法刪除已註冊爲刪除的文件或目錄無效。
根據 Java 語言規範中的定義,只有在虛擬機正常終止時,纔會嘗試執行刪除操做。
一旦請求了刪除操做,就沒法取消該請求。因此應當心使用此方法。
|
public static File createTempFile(String prefix,
String suffix,
File directory)
throws IOException
|
在指定目錄中建立一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。 若是 directory 參數爲 null,則使用與系統有關的默認臨時文件目錄 默認臨時文件目錄由系統屬性 java.io.tmpdir 指定 |
public static File createTempFile(String prefix,
String suffix)
throws IOException
|
在默認臨時文件目錄中建立一個空文件,使用給定前綴和後綴生成其名稱。 調用此方法等同於調用 createTempFile(prefix, suffix, null) |
public boolean createNewFile()
throws IOException
|
當且僅當不存在具備此抽象路徑名指定名稱的文件時,不可分地建立一個新的空文件。 檢查文件是否存在,若不存在則建立該文件 若是指定的文件不存在併成功地建立,則返回 true;若是指定的文件已經存在,則返回 false |
public String[] list() | 返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄。
若是此抽象路徑名不表示一個目錄,那麼此方法將返回 null。
不然返回一個字符串數組,每一個數組元素對應目錄中的每一個文件或目錄。
表示目錄自己及其父目錄的名稱不包括在結果中。每一個字符串是一個文件名,而不是一條完整路徑。
|
public String[] list(FilenameFilter filter) | 返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中知足指定過濾器的文件和目錄。 除了返回數組中的字符串必須知足過濾器外,此方法的行爲與 list() 方法相同。 若是給定 filter 爲 null,則接受全部名稱。 |
public File[] listFiles() | 返回一個抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件。 若是此抽象路徑名不表示一個目錄,那麼此方法將返回 null。 不然返回一個 File 對象數組,每一個數組元素對應目錄中的每一個文件或目錄。 表示目錄自己及其父目錄的名稱不包括在結果中。 不保證所得數組中的相同字符串將以特定順序出現,特別是不保證它們按字母順序出現。 |
public File[] listFiles(FilenameFilter filter) | 除了返回數組中的路徑名必須知足過濾器外,此方法的行爲與 listFiles() 方法相同 若是給定 filter 爲 null,則接受全部路徑名 |
public File[] listFiles(FileFilter filter) | 除了返回數組中的路徑名必須知足過濾器外,此方法的行爲與 listFiles() 方法相同。 若是給定 filter 爲 null,則接受全部路徑名。 |
public static File[] listRoots() |
列出可用的文件系統根。
特定 Java 平臺能夠支持零個或更多個分層組織的文件系統。
每一個文件系統有一個 root 目錄,能夠從這裏到達文件系統中的全部其餘文件。
例如,Windows 平臺爲每一個活動驅動器提供了一個根目錄;
UNIX 平臺只有一個根目錄,即 "/"。
可用文件系統根的設置受各類系統級操做的影響,好比可移動介質的插入和彈出,以及斷開或卸載那些物理磁盤或虛擬磁盤。
此方法返回一個 File 對象數組,這些對象表示可用文件系統根的根目錄。
能夠保證本地機器上物理存在的任何文件的規範路徑名都以此方法返回的根之一開始。
|
public boolean canExecute() | 測試應用程序是否能夠執行此抽象路徑名錶示的文件。 |
public boolean canRead() | 測試應用程序是否能夠讀取此抽象路徑名錶示的文件。 |
public boolean canRead() | 測試應用程序是否能夠修改此抽象路徑名錶示的文件。 |
setExecutable(boolean)
setExecutable(boolean, boolean)
|
設置此抽象路徑名的全部者或全部用戶的執行權限。
executable - 若是爲 true,則設置容許執行操做的訪問權限;若是爲 false,則不容許執行操做。
ownerOnly - 若是爲 true,則執行權限只適用於全部者的執行權限;不然適用於全部用戶。
若是底層文件系統不能區分全部者執行權限與其餘執行權限,那麼不管該參數爲什麼值,執行權限將適用於全部用戶。
單參數版本是雙參數版本的快捷默認設置形式
file.setExcutable(arg) 形式的調用與如下調用的行爲徹底相同:file.setExecutable(arg, true)
也就是單參數默認是設置當前用戶
|
setReadable(boolean)
setReadable(boolean, boolean)
|
設置此抽象路徑名的全部者或全部用戶的讀權限。 其他的用法形式同setExecutable |
setWritable(boolean)
setWritable(boolean, boolean)
|
設置此抽象路徑名的全部者或全部用戶的寫權限。
其他的用法形式同setExecutable
|
public boolean setReadOnly() |
標記此抽象路徑名指定的文件或目錄,從而只能對其進行讀操做。
調用此方法後,能夠保證在被刪除或被標記爲容許寫訪問以前,文件或目錄不會發生更改。
是否能夠刪除某個只讀文件或目錄則取決於底層系統。
|
public boolean setLastModified(long time) | 設置此抽象路徑名指定的文件或目錄的最後一次修改時間。 |
public Path toPath() | 返回一個java.nio.file.Path 從這個抽象路徑構造的Path對象 1.7新增的 |
public String toString() | 返回此抽象路徑名的路徑名字符串。該字符串就是 getPath() 方法返回的字符串。
public String toString() {
return getPath();
}
|
public URI toURI() |
構造一個表示此抽象路徑名的 file: URI。
該 URI 的具體形式與系統有關。若是能夠肯定此抽象路徑名錶示的文件是一個目錄,那麼所得 URI 將以斜槓結束。
對於某個給定抽象路徑名 f,可保證:
new File( f.toURI()).equals( f.getAbsoluteFile())
|
public int compareTo(File pathname) | 按字母順序比較兩個抽象路徑名。此方法定義的順序取決於底層系統。 在 UNIX 系統上,比較路徑名時,字母大小寫一般很重要,而在 Microsoft Windows 系統上,這一般不重要。 依賴 |
public boolean equals(Object obj) | 測試此抽象路徑名與給定對象是否相等。 當且僅當該參數不是 null,而是一個與此抽象路徑名錶示相同的文件或目錄的抽象路徑名時,返回 true。 兩個抽象路徑名是否相等取決於底層系統。 在 UNIX 系統上,比較路徑名時,字母大小寫一般很重要,而在 Microsoft Windows 系統上,這一般不重要。 |
public int hashCode() | 計算此抽象路徑名的哈希碼。 由於抽象路徑名的相等性與系統有關,因此對其哈希碼的計算也與系統有關。 在 UNIX 系統上,抽象路徑名的哈希碼等於其路徑名字符串和十進制值 1234321 的哈希碼的異或。 在 Microsoft Windows 系統上,哈希碼等於其轉換爲小寫的路徑名字符串和十進制值 1234321 的哈希碼的異或。 在將路徑名字符串轉換爲小寫時不考慮語言環境。 |
private final char slash;//斜槓符號 private final char altSlash;//與slash相反的斜槓 private final char semicolon;//分號 private static String[] driveDirCache = new String[26];//表示驅動盤目錄緩存 private ExpiringCache cache = new ExpiringCache();//用於緩存標準路徑 private ExpiringCache prefixCache = new ExpiringCache();//用於緩存標準路徑前綴
咱們給出來了一個亂七八糟的路徑,最終路徑按照當前文件系統的規則,進行了解析,
去除了沒必要要的分隔符 或者可能把錯誤的分隔符進行替換等按照必定的規則
整理出來一個合理的路徑,這就是標準化
|
仍是剛纔的文件夾列表 此次使用另外的構造方法
File file = new File("D:\\\\\\/testFile///////\\\\","\\///wdwqdwqwd.java"); if (file.exists()){ System.out.println(file.getName()); }
因此能夠看得出來resolve作的事情
他要求傳遞進去的兩個字符串都是normal的,因此入參傳遞進去時,就作了處理
雖說兩個都是normal可是兩個拼接起來的狀況仍是極可能須要處理的,
好比子路徑若是以 slash 開頭,丟棄它的頭部,因此子路徑從第2的位置開始
雙參數的resolve就是解決這個問題的
一個參數的resolve
public String resolve(File f)
也是相似的道理
只不過他處理的是一個File
|
linux的絕對路徑是指從根目錄提及的. 例如 /home/somedir/..
而相對路徑則是從當前目錄提及: 即 ./
|
有4個相對路徑的表示方法:
當前目錄 .
父目錄 ..
某用戶的根目錄 ~user
本身的根目錄 ~
|