File類簡介
類 File 是文件或者目錄路徑的抽象表述,並非指的是表示文件的字符串。通常情況下來說,操作系統和用戶接口使用系統相關的路徑表示方式去表示文件或目錄,而 File 提供一種系統無關的路徑表示方式。一個抽象的路徑名包含兩部分:
- 可選的系統相關的前綴字符串,如磁盤驅動器說明符,“/”表示UNIX系統的根目錄等等。
- 零個或者多個表示名字的字符串序列。
抽象路徑名的第一個名字可能是一個目錄的名稱,也有可能是主機名,抽象路徑名中的每一個名稱都表示一個目錄,而最後一個名稱可能表示一個目錄,也有可能表示一個文件。
路徑名字符串與抽象路徑名之間的轉換本質上是系統相關的,主要體現在文件分割符。
描述文件的路徑名可以是絕對路徑或者是相對路徑。java.io 包裏的所有類都是根據當前用戶目錄(該目錄由系統屬性 user.dir 確定,也是 JVM 被調用的目錄,即 Java 項目所在根目錄,表示相對於整個項目而言的結果)來解析相對路徑的。
另外,文件系統可能包含了一些限制,如讀、寫與執行等限制。這些限制稱爲訪問權限。文件系統可能對單個對象具有多組訪問權限。比如,一組訪問權限用於對象的持有者,另外一組訪問權限用於其他所有用戶。對象的訪問權限可能導致該類中的個別方法操作失敗。
File類的實例是不可改變的,即一旦創建,文件對象的抽象路徑名就不會再改變。
與 java.nio.file 包的互操作性:java.nio.file 爲 JVM 定義了一些類和接口去訪問文件、文件屬性和文件系統。這些 API 可以克服 java.io.File 類的不足之處。函數 toPath 可以獲得一個 Path 對象,該對象利用 File 對象的抽象路徑去定位一個文件。生成的路徑可以與 Files 類一起使用,以提供對其他文件操作、文件屬性和IO異常的更高效和方法的訪問,從而在文件操作失敗時幫助診斷錯誤。
File類總結
字段
File 類擁有4個靜態常量字段,分別爲 pathSeparator、pathSeparatorChar、separator 和 separatorChar。前兩個返回路徑分隔符(’;‘或’:’),後兩個返回名稱分隔符(’/‘或者’\’)。
構造器
File(File parent, String child), File(String pathname), File(String parent, String child)和File(URI uri)
函數
- boolean canExecute() | canWrite() | canRead()指定文件或目錄是否可執行、可寫與可讀。
- int compareTo(File pathname)按照字典順序比較兩個抽象路徑名。
- boolean createNewFile()根據抽象路徑名自動創建一個空文件,前提條件是指定文件不存在。
- static File createTempFile(String prefix, String suffix) | createTempFile(String prefix, String suffix, File directory)在默認目錄或指定directory下創建一個空文件,使用指定的前綴和後綴來生成文件名。
- boolean delete()刪除文件或者目錄。
- void deleteOnExit()當虛擬機停止工作時,刪除指定文件或者目錄。
- boolean exists()指定文件或目錄是否存在。
- File getAbsoluteFile()獲取抽象路徑名的絕對形式。
- String getAbsolutePath()獲取抽象路徑名的絕對路徑名。
- File getCanonicalFile()獲取抽象路徑名的基本形式(規範形式)。
- String getCanonicalPath()獲取抽象路徑名的規範路徑名。
- long getFreeSpace() | getTotalSpace() | getUsableSpace()返回抽象路徑名命名的分區中爲被分配的字節數,總的字節數以及可用字節數。
- String getName() | getParent()
- File getParentFile()
- String getPath()將抽象路徑名轉換爲路徑名字符串並返回。
- boolean isAbsolute() | isDirectory() | isFile() | isHidden()返回該抽象路徑名錶示的文件是否是絕對形式、目錄、文件、隱藏文件。
- long lastModified()返回文件上次被修改的時間。
- long length()返回文件的長度。
- String[] list() | list(FilenameFilter filter)返回(滿足指定過濾器)抽象路徑名錶示的指定目錄下的所有文件名和目錄名。
- File[] listFiles() | listFiles(FileFilter filter) | listFiles(FilenameFilter filter)返回(滿足指定過濾器)抽象路徑名錶示的指定目錄下的所有文件的抽象路徑名錶示形式。
- static File[] listRoots()返回可用的文件系統的根。
- boolean mkdir() | mkdirs()創建不存在的目錄(後者可以創建多級目錄,這些目錄是必須且不存在的)。
- boolean renameTo(File dest)文件重命名
- boolean setExecutable(boolean executable) | setExecutable(boolean executable, boolean ownerOnly)設置(是否僅僅)所有者對該抽象路徑名的執行權限。
- boolean setReadable(boolean readable) | setReadable(boolean readable, boolean ownerOnly)讀權限的設置
- boolean setWritable(boolean writable) | setWritable(boolean writable, boolean ownerOnly)寫權限的設置
- boolean setLastModified(long time)設置文件/目錄上一次被修改的時間。
- boolean setReadOnly()設置只讀
- Path toPath()返回一個從抽象路徑名構造的 java.nio.file.Path 對象。
- URI toURI()返回一個URI對象來表示該抽象路徑名。
示例代碼
import java.io.File;
import java.io.IOException;
public class LearnFile {
public static void main(String[] args) {
String currentPath = System.getProperty("user.dir");
String path = currentPath + File.separatorChar + "a" + File.separatorChar
+ "b" + File.separatorChar + "c" + File.separatorChar;
File directory = new File(path);
if (!directory.exists()) {
directory.mkdirs();
}
String filePath = path + "JVM.properties";
File file = new File(filePath);
try {
file.createNewFile();
} catch (IOException ioe) {
}
if (file.exists()) {
file.setReadOnly();
}
System.out.println(file.getAbsolutePath());
}
}
實際應用中,文件路徑名之間的分隔符推薦使用 File.separatorChar 或者 File.separator 而非採用絕對的’\‘或者’/'形式,因爲很有可能開發是在windows平臺上,而服務器使用的Linux系統。同樣推薦使用相對路徑來表示文件,即相對於項目所在的位置而言,實現跨平臺的目的。