摘要:類位于的這個包下。的構造器中的路徑參數也支持絕對路徑和相對路徑,像上面的代碼用的是絕對路徑。也提供了另外一種構造器這兩個構造器可以讓你在構造文件或目錄時指定它的父目錄。返回的,則是所有文件或目錄所代表的對象。同時提供以下接口獲取文件權限信息
File類位于JDK的java.io這個包下。構造器
一個File類既可以代表一個文件,也可以代表一個目錄。
要使用File,首先需要通過構造器構造它的一個實例
File file1 = new File("/a/b"); File file2 = new File("C:a.dat");
構造File類需要給它指定一個路徑,比如上面代碼中的/a/b,C:a.dat.
路徑可以代表一個文件,也可以代表一個目錄。
路徑分隔符依據操作系統的不同而不同,在類Unix系統中,分隔符是/,而在windows操作系統中,分隔符是,如果在代碼中以硬編碼的方式寫死了路徑分隔符,那么代碼的可移植性就不高。可以通過File.separator或者是File.separatorChar來獲取當前操作系統的路徑分隔符。
File的構造器中的路徑參數也支持絕對路徑和相對路徑,像上面的代碼用的是絕對路徑。那么相對路徑相對的是哪個路徑呢?Java會默認采用user.dir作為當前路徑,可以通過System.getProperty("user.dir")來得到這個路徑,這個路徑也是JVM啟動時所在的路徑。
File也提供了另外一種構造器:
File(String parent, String child) File(File parent, String child)
這兩個構造器可以讓你在構造文件或目錄時指定它的父目錄。
路徑與名字File類包含了諸多獲取路徑和路徑名字的方法,這些方法看似差別不大卻又別有洞天,可以通過下面幾段代碼來看看區別:
執行以下代碼
File file = new File("."); System.out.println("Absolute path = " + file.getAbsolutePath()); System.out.println("Canonical path = " + file.getCanonicalPath()); System.out.println("Name = " + file.getName()); System.out.println("Parent = " + file.getParent()); System.out.println("Path = " + file.getPath()); System.out.println("Is absolute = " + file.isAbsolute());
得到的結果是:
Absolute path = C:prjooksioch02codePathInfo. Canonical path = C:prjooksioch02codePathInfo Name = . Parent = null Path = . Is absolute = false
執行以下代碼:
File file = new File("C: eports2015..2014February"); System.out.println("Absolute path = " + file.getAbsolutePath()); System.out.println("Canonical path = " + file.getCanonicalPath()); System.out.println("Name = " + file.getName()); System.out.println("Parent = " + file.getParent()); System.out.println("Path = " + file.getPath()); System.out.println("Is absolute = " + file.isAbsolute());
得到的結果是:
Absolute path = C: eports2015..2014February Canonical path = C: eports2014February Name = February Parent = C: eports2015..2014 Path = C: eports2015..2014February Is absolute = true
執行以下代碼:
File file = new File(""); System.out.println("Absolute path = " + file.getAbsolutePath()); System.out.println("Canonical path = " + file.getCanonicalPath()); System.out.println("Name = " + file.getName()); System.out.println("Parent = " + file.getParent()); System.out.println("Path = " + file.getPath()); System.out.println("Is absolute = " + file.isAbsolute());
得到的結果是:
Absolute path = C:prjooksioch02codePathInfo Canonical path = C:prjooksioch02codePathInfo Name = Parent = null Path = Is absolute = false
從這里可以看出來,file.getAbsolutePath()會把相對路徑的信息也打印出來,讀起來并不是非常直觀的,而file.getCanonicalPath()總是以對人類閱讀友好的方式打印路徑。
如果File的入參是絕對路徑,那么getName和getPath只打印入參,并且getParent為null。
前面說過,File可以是一個文件,也可以代表一個目錄,如何知道File代表的是哪一個呢?通過以下兩個方法就可以知道
boolean isDirectory()
boolean isFile()
有時候我們想知道File代表的那個文件或目錄是否在文件系統中存在,boolean exists()會告訴你。
在類Unix文件系統中,隱藏文件通常以.開頭,比如用戶的home目錄下的.bash_profile,同樣在windows中也會有隱藏文件,可通過isHidden()來判斷一個文件是否是隱藏文件。通過length()可以獲得文件的大小,通過lastModified()可以獲得文件的最后修改時間,這個時間是距離(1970,1,1)的毫秒數。通常可以通過比較一個文件的最后修改時間來判斷文件是否被修改過。
可通過File[] listRoots()來列舉當前文件系統的根目錄。
在windows下,就是列出所有的盤符:
C: D: E: F:
在Unix中,只有一個,那就是/。
如果要列出某個特定目錄下的文件和目錄呢,有以下方法:
String[] list() String[] list(FilenameFilter filter) File[] listFiles() File[] listFiles(FileFilter filter) File[] listFiles(FilenameFilter filter)
以上方法中,返回String[]的,則是列舉出所有文件或目錄的名字。返回File[]的,則是所有文件或目錄所代表的File對象。
FileFilter和FilenameFilter是過濾器,能讓你在列舉目錄時選擇過濾掉哪些文件或目錄。
File提供了三個方法可以讓你得知某個分區的磁盤空間的信息:
long getFreeSpace() //獲取剩余空間 long getTotalSpace() //獲取總空間大小 long getUsableSpace() //獲取剩余可用空間
盡管getFreeSpace和getUsableSpace看起來差不多,但實際上是有差別的,getUsableSpace會進行更多細致的檢查,比如當前JVM進程是否對該目錄有寫權限,以及另外一些操作系統的限制等,但getFreeSpace和getUsableSpace返回的值只能當做一個參考值,因為有可能有其他的進程正在讀寫這個磁盤空間。
下面是一個例子:
File[] roots = File.listRoots(); for (File root: roots) { System.out.println("Partition: " + root); System.out.println("Free space on this partition = " + root.getFreeSpace()); System.out.println("Usable space on this partition = " + root.getUsableSpace()); System.out.println("Total space on this partition = " + root.getTotalSpace()); System.out.println("***"); }
輸出結果為:
Partition: C: Free space on this partition = 143271129088 Usable space on this partition = 143271129088 Total space on this partition = 499808989184 *** Partition: D: Free space on this partition = 0 Usable space on this partition = 0 Total space on this partition = 0 *** Partition: E: Free space on this partition = 733418569728 Usable space on this partition = 733418569728 Total space on this partition = 1000169533440 *** Partition: F: Free space on this partition = 33728192512 Usable space on this partition = 33728192512 Total space on this partition = 64021835776 ***對文件或目錄進行修改
如果想創建一個文件,使用boolean createNewFile()將會創建一個新的空文件,同樣,創建一個目錄可以用boolean mkdir() 或者boolean mkdirs() ,如果中間目錄不存在,后者會創建好所有中間目錄,而前者將會報錯某個目錄不存在。
有時候你希望創建一個臨時文件,可以使用static File createTempFile(String prefix, String suffix),這個方法將會默認把臨時文件放在用戶的臨時文件夾中,如果你想指定臨時文件存放的地方,可以使用static File createTempFile(String prefix, String suffix, File directory)指定該目錄。
文件權限從Java 1.6開始,增加了對文件權限修改的接口。
boolean setExecutable(boolean executable) boolean setExecutable(boolean executable, boolean ownerOnly) boolean setReadable(boolean readable) boolean setReadable(boolean readable, boolean ownerOnly) boolean setWritable(boolean writable) and boolean setWritable(boolean writable boolean ownerOnly)
同時提供以下接口獲取文件權限信息:
boolean canRead() boolean canWrite() boolean canExecute()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65343.html
摘要:小編來為大家介紹幾款比較常用的開發工具這是象面包和奶油一樣必須的通用語言庫,這個實用工具類包括一些很早以前在中未包含的重要方法。 小編來為大家介紹幾款比較常用的Java開發工具:StringUtils這是象面包和奶油一樣必須的通用語言庫,這個實用工具類包括一些很早以前在String中未包含的重要方法。StringUtils...
摘要:流讀寫基本功能新建文件查看列表寫文件刪除文件查看文件導入的包下面新建一個類,然后在函數里初始化一個方法,方法中用來判斷輸入的值所相對應的功能板塊。這里也只限制于在正常情況下的輸入輸出。 IO流讀寫 基本功能: 新建文件 查看列表 寫文件 刪除文件 查看文件 導入的包: import java.io.BufferedInputStream; import java.io.Buffe...
摘要:除非文件用自帶的記事本打開我們能夠讀懂,才采用字符流,否則建議使用字節流。 第四階段 IO IO流 前言: 前面的學習我們只能夠在已有的一定封閉范圍內進行一些操作,但是這顯然是無趣的,也是不支持我們實現一些復雜的需求,所以Java提供IO流這樣一種概念,方便我們對數據進行操作 而使用IO流我們可以實現一些強大的功能,例如針對文件的移動復制等操作,又或者程序與外部文件之間的數據存儲或者讀...
摘要:前面文章已經分享了如何創建導出需要用到的模板了,接下來這里要給大家分享的是如何用后臺制作導出的代碼工具和實現。可以重,數據庫裝載。 前面文章已經分享了如何創建導出word需要用到的xml/ftl模板了,接下來這里要給大家分享的是如何用后臺制作導出word的代碼工具和controller實現。 1、首先是工具類,沒有工具,談何實現呢?下面貼我這邊導出word的utils,大家可以直接復制...
摘要:學習筆記二流的概念在程序中所有的數據都是以流的方式進行傳輸或保存的,程序需要數據的時候要使用輸入流讀取數據,而當程序需要將一些數據保存起來的時候,就要使用輸出流完成。主要功能是向文件中寫入內容構造函數根據給定的對象構造一個對象。 Java IO學習筆記二 流的概念 在程序中所有的數據都是以流的方式進行傳輸或保存的,程序需要數據的時候要使用輸入流讀取數據,而當程序需要將一些數據保存起來...
摘要:流按操作類型分為兩種字節流字節流可以操作任何數據因為在計算機中任何數據都是以字節的形式存儲的字符流字符流只能操作純字符數據,比較方便。 1_IO流概述及其分類 1.概念 IO流用來處理設備之間的數據傳輸 Java對數據的操作是通過流的方式 Java用于操作流的類都在IO包中 流按流向分為兩種:輸入流,輸出流。 流按操作類型分為兩種: 字節流 : 字節流可以操作任何數據,因為在...
閱讀 1639·2021-10-09 09:44
閱讀 2787·2021-10-08 10:04
閱讀 2468·2021-09-26 09:55
閱讀 3840·2021-09-22 10:02
閱讀 3311·2019-08-29 17:08
閱讀 1069·2019-08-29 15:08
閱讀 2957·2019-08-26 13:52
閱讀 3274·2019-08-26 13:34