File類總結
File類總結
- 所在包:
java.io
- File類直接繼承Object類,實現了兩個接口
Serializable
和Comparable<File>
File類的全局常量:路徑分隔符
separator
註意註意註意:全局常量在此處使用了小寫字母public static final String separator
- 註意:IO部分到處都在拋異常,我們暫時全忽略,主方法上加
throws Exception
File類最常用的構造函數
public File(String pathname)
舉例如下:File file = new File("d:" + File.separator + "123" + File.separator + "456.txt") ; // 如果要用當前目錄的話,就是 "." + File.separator + ......"
File類其它構造函數(沒有無參構造)
public File(File parent,String child) // 在andriod開發上使用比較多,比如先取得系統規劃的SD卡父目錄,然後再加上自己定義的子目錄 public File(String parent,String child) public File(URI uri)
關於路徑的說明:
public File(String pathname) 這裏的路徑參數使用的是String類型的參數,那舉例說明: 1、假設要訪問D盤根目錄下的text.txt文件,那pathname="d:\text.txt" ,此時問題出現了,\t代表的是制表符,所以程序會報錯。 2、假設要訪問D盤根目錄下的demo.txt文件,那pathname="d:\demo.txt" ,此時沒有任何問題。 3、基於以上兩點,為了保險起見,我們需要將\轉義,即\\ .例如:pathname="d:\\text.txt" 或 pathname="d:\\demo.txt" 都是正確的。 4、但是,在linux下分隔符是/這樣兒的斜線,所以為了統一,就使用到了File類的常量separator 即:pathname="d:" + File.separator + "demo.txt" 5、當然,linux下也沒有d盤,關於這個問題暫時保留,我後面再研究。
創建文件方法:
createNewFile()
, 返回布爾值public boolean createNewFile() throws IOException
File file = new File("d:" + File.separator + "123.txt") ; System.out.println(file.createNewFile()) ;
刪除文件方法:
delete()
返回布爾值public boolean delete()
File file = new File("d:" + File.separator + "123.txt") ; System.out.println(file.createNewFile()) ; Thread.sleep(2000) ; System.out.println(file.delete()) ;
判斷文件是否存在的方法
exists()
返回布爾值public boolean exists()
File file = new File("d:" + File.separator + "123.txt") ; // 如果文件存在,就刪除,不存在,就創建 if (file.exists()) { System.out.println(file.delete()) ; } else { System.out.println(file.createNewFile()) ; }
判斷是否是文件 isFile() 返回布爾值
public boolean isFile()
// 給出的路徑目錄或文件不存在的話,那就必然會返回false File file = new File("d:" + File.separator + "123.txt") ; System.out.println(file.isFile()) ;
判斷是否是文件 isDirectory() 返回布爾值
public boolean isDirectory()
// 給出的路徑目錄或文件不存在的話,那就必然會返回false File file = new File("d:" + File.separator + "123.txt") ; System.out.println(file.isDirectory()) ;
- 得到父目錄 getParent() ,返回值 String
public String getParent()
得到父目錄 getParentFile() ,返回值 File
public File getParentFile()
File file = new File("d:" + File.separator + "123" + File.separator + "456" + File.separator + "789.txt") ; String str = file.getParent() ; File file2 = file.getParentFile() ; System.out.println(str) ; System.out.println(file2) ;
因為getParentFile() 返回值 File,而取得File類型對象就可以使用File類的很多方法了,所以工作中取得父目錄時大部分是要使用getParentFile()方法的。
- 創建目錄方法:mkdir() 返回布爾值
public boolean mkdir()
創建目錄方法:mkdirs() 返回布爾值
public boolean mkdirs()
File file = new File("d:" + File.separator + "123" + File.separator + "456" + File.separator + "789.txt") ; if (!file.getParentFile().exists()) file.getParentFile().mkdirs() ; if (!file.exists()) file.createNewFile() ;
取得文件大小方法:length() 返回值long
public long length()
// 返回結果為原始的long型字節 File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("文件大小:" + file.length() + "Byte"); }
// 字節/1024/1024 得到M File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("文件大小:" + file.length()/1024/1024 + "M"); }
// 以為因數據類型是long而沒有小數,再改造,在第一個long處強制轉換為double File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("文件大小:" + (double)file.length()/1024/1024 + "M"); }
// 以上結果為小數,但小數位數太多,再改造,留兩位小數 File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("文件大小:" + new BigDecimal((double)file.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP) + "M"); }
取得最近一次修改時間:lastModified() 返回值long
public long lastModified()
// 返回結果為原始的long型字節 File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("最近一次修改時間:" + file.lastModified()); }
// long 轉 Date File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("最近一次修改時間:" + new Date(file.lastModified())); }
// 格式化顯示Date File file = new File("d:" + File.separator + "1.flv") ; if (file.isFile()) { System.out.println("最近一次修改時間:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified()))); }
可讀 canRead() 可寫 canWrite() 可執行canExecute()
canExecute() 方法在linux下才有效,windows下沒有此屬性,在windows下,大部分情況下canExecute()是返回true windows下的這三種屬性與安全權限無關,只與文件屬性有關,linux 系統下的情況待測。
取得文件名 getName() 返回 String
public String getName()
如果路徑中僅有盤符,則返回空 正常則返回最後一個分隔符部分,無論最後一部分是文件還是目錄,無論文件存不存在,都會返回其對應的名字
取得路徑 getPath() 返回 String
public String getPath()
如果路徑中僅有盤符,照常返回 無論最後一部分是文件還是目錄,無論文件存不存在,都會返回完整路徑,包含文件名(如果有)。
- 列出目錄下的目錄和文件 list() 返回值 String[]
public String[] list()
- 列出目錄下的目錄和文件 listFiles() 返回值 File[]
public File[] listFiles()
因 listFiles() 方法返回值是File數組,利用File類的很多方法可以繼續做很多事情,所以工作中用 listFiles() 的機會很多,用list()方法的情況很少。用list()還有一個非常不好的地方,就是列出來的文件和目錄只有名字,沒有完整路徑,這樣兒即使是想增強功能都難了。
//列出 d 盤下所有的文件和文件夾 File file = new File("d:" + File.separator) ; File[] fileArray = file.listFiles() ; for (File x : fileArray) { System.out.println(x) ; }
//列出 d 盤下所有的文件和文件夾(包含子目錄) public static void main(String[] args) { File file = new File("d:" + File.separator) ; if (file.isDirectory() && file.listFiles() != null) print(file) ; } public static void print(File x) { for (File f : x.listFiles() ) { if (f.isDirectory() && f.listFiles() != null) print(f) ; System.out.println(f) ; } }
綜合練習(做一個資源管理器)
依次顯示
名稱
--修改日期
--類型
--大小
File file = new File("d:" + File.separator) ; File[] fileArray = file.listFiles() ; for (File x : fileArray) { String str = x.getName() + "\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(x.lastModified())) + "\t" + (x.isDirectory()?"文件夾":"文件") + "\t" + (x.isFile()?(new BigDecimal((double)x.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP) + "M"):"") ; System.out.println(str); }
File類總結