File類--System.out.print(Object obj)的理解
一.File 類(java.io)
概述:Java中使用File類來表示文件或者文件夾對象!
抽象路徑名:描述文件或文件夾時,使用的路徑符號,就是一個對象的字符串表示形式,如"c:\\";
絕對路徑:絕對位置開始的路徑;
相對路徑:相對位置開始的路徑;
構造方法:
File(String pathname)
File(String parent, String child)
File(File parent, String child)
常用方法:
1.創建與刪除的方法
public boolean createNewFile(){}:當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件.
報:IOException;
public boolean mkdir(){}:創建此抽象路徑名指定的目錄.
public boolean mkdirs(){}:創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄.
public boolean delete(){}:刪除此抽象路徑名表示的文件或目錄。
註意1:刪除的內容不進回收站,徹底刪除!
註意2:如果File對象是文件夾,且文件夾的內容不為空,會刪除失敗!
2.其它常用方法
public boolean exists(){}:測試此抽象路徑名表示的文件或目錄是否在硬盤上存在。
public boolean isDirectory(){}:測試此抽象路徑名表示的文件是否是一個目錄.必須先保證exists方法得到true,才有效,否則,永遠得false;
public boolean isFile(){}:測試此抽象路徑名表示的文件是否是一個標準文件.必須先保證exists方法得到true,才有效,否則,永遠得false
public String getAbsolutePath(){}:返回此抽象路徑名的絕對路徑名字符串.--(得到是字符串!!!)
public String getPath(){}:將此抽象路徑名轉換為一個路徑名字符串。(得到的值就是創建對象的時候傳遞的參數).--(得到是字符串!!!)
public String toString(){}:返回此抽象路徑名的路徑名字符串.等同於getPath方法.--(得到是字符串!!!)
public String getName(){}:返回由此抽象路徑名表示的文件或目錄的名稱.----(得到是字符串!!!)
public String getParent(){}:返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null----(得到是字符串!!!)
public File getParentFile(){}:返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null
public long length(){}:返回由此抽象路徑名表示的文件的長度。不能使用文件夾對象調用,否則得到的數據無意義
public String[] list(){}:列出指定文件夾下全部內容,僅列出名稱
public File[] listFiles(){}:列出指定目錄下的全部內容,會列出路徑
public boolean renameTo(File dest){}:為已有的文件重新命名.如果參數dest表示的文件(A)的路徑與調用renameTo方法的那個對象(B),
在同一個文件夾下,是重命名的效果,如果不在同一個文件夾下,是剪切的效果;
報:NullPointerException;
public File[] listFiles(FileFilter filter){}:通過過濾器獲取對象數組;
3.常量
public static final String pathSeparator:路徑分隔符,windows中是":"
public static final String separator:路徑分隔符,windows中是"\";
代碼演示:
1 /*相對工程所在的目錄創建一個Demo文件夾,裏面包含兩個文件夾Demo1和Demo2; 2 Demo1文件夾裏包含11.txt和11.java文件; 3 Demo2文件夾裏包含21.txt和21.java文件; 4 遍歷取出Demo文件夾裏所有的java文件,並輸出各java文件的絕對路徑和父目錄路徑名 5 */ 67 import java.io.File; 8 import java.io.IOException; 9 public class DemoFile{ 10 public static void main(String[] args) throws IOException{ 11 //相對工程所在的目錄創建一個Demo文件夾,裏面包含兩個文件夾Demo1和Demo2 12 File f1 = new File("Demo\\Demo1"); 13 File f2 = new File("Demo\\Demo2"); 14 f1.mkdirs(); 15 f2.mkdirs(); 16 //Demo1文件夾裏包含11.txt和11.java文件 17 File f3 = new File(f1,"11.txt"); 18 File f4 = new File(f1,"11.java"); 19 f3.createNewFile(); 20 f4.createNewFile(); 21 //Demo2文件夾裏包含21.txt和21.java文件 22 File f5 = new File(f2,"21.txt"); 23 File f6 = new File(f2,"21.java"); 24 f5.createNewFile(); 25 f6.createNewFile(); 26 //遍歷取出Demo文件夾裏所有的java文件,並輸出各java文件的絕對路徑和父目錄路徑名 27 printfil(f1.getParentFile()); 28 } 29 30 public static void printfil(File f){ 31 //安全校驗 32 if(f.exists() && f != null && f.isDirectory()){ 33 //列出目錄下所有文件內容 34 File[] file = f.listFiles(); 35 //遍歷,並匹配以java結尾的文件 36 for(File f1 : file){ 37 //判斷是不是標準文件 38 if(f1.isFile()){ 39 if(f1.getName().endsWith(".java")){ 40 System.out.println("java文件絕對路徑:"+f1.getAbsolutePath()); 41 System.out.println("java文件父路徑:"+f1.getParent()); 42 }else{ 43 System.out.println("忽略的文件為:"+f1.getName()); 44 } 45 //如果不是標準文件,則繼續調用本方法 46 }else{ 47 printfil(f1); 48 } 49 } 50 } 51 } 52 } 53
二.關於System.out.print(Object obj);的理解
1.System調用其類屬性out,而out又是PrintStream類型,所以out可以調用類PrintStream的方法print.
2.調用print()打印Object時,會判斷Object是否為空,如果為空,輸出null;如果非空,調用Object的toString().
3.如果toString()方法被覆寫,那就調用覆寫後的;如果沒有被覆寫,就用自身的,自身的方法是用反射獲取類名稱,
然後拼接一個"@",再調用hashCode()方法,並將其返回值變為16進制字符串.
4.如果hashCode()被覆寫了,就調用覆寫後的,輸出後為哈希散列特征碼;如果沒有被覆寫,就用自身的,
這個自帶的hashCode()實現的邏輯是本地代碼,JDK源碼並末提供.輸出為地址值.
附:
public void print(Object obj)--java.io.PrintStream
The string produced by the String.valueOf(Object) method is translated into bytes
public String toString()--- java.lang.String
getClass().getName() + [email protected] + Integer.toHexString(hashCode())
File類--System.out.print(Object obj)的理解