文件的操作
這一節我們來討論關於文件自身的操作
不浪費唾沫了,用代碼說話……
實例1:創建文件對象
import java.io.File; public class Demo { public static void main(String[] args) { //創建要操作的文件路徑和名稱 //其中,File.separator表示系統相關的分隔符,Linux下為:/ Windows下為:\\ //path在此程序里面代表父目錄,不包含子文件 String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator; //childPath在此程序里面代表子目錄,包含子文件 String childPath = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; //用父目錄和子文件分隔的方式構造File對象 //也可以寫成 new File("/home/siu/work","test.txt"); File f1 = new File(path,"test.txt"); //使用絕對路徑來構造File對象 //也可以寫成new File("/home/siu/work/demo.txt"); File f2 = new File(childPath); //創建父目錄的文件對象 File d = new File(path); //使用已有父目錄對象和子文件構建新的File對象 File f3 = new File(d,"hello.txt"); System.out.println("f1的路徑" + f1); System.out.println("f2的路徑" + f2); System.out.println("f3的路徑" + f3); } }
編譯后,顯示各個File對象所指向的絕對路徑
實例2:創建和刪除文件
import java.io.File; import java.io.IOException; public class Demo { public static void main(String[] args) { String Path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; File f = new File(Path); try { /*因為創建和刪除文件涉及到底層操作,所以有可能會引發異常*/ //如果創建成功則會返回true //如果已存在該文件,則創建不成功,返回flase,別以為會覆蓋 System.out.println("創建文件:" + f.createNewFile()); //刪除文件,成功返回true,否則返回flase System.out.println("刪除文件:" + f.delete()); //此方法表示在虛擬機退出時刪除文件 //原因在於:程序運行時有可能發生異常造成直接退出 //清理殘余很有必要~! f.deleteOnExit(); } catch (IOException e) { e.printStackTrace(); } } }
你看,創建成功,所以返回true,因為已經創建好了,所以刪除也能成功
實例3:文件的判斷和測試
import java.io.File; public class Demo { public static void main(String[] args) { String Path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "Demo.txt"; File f = new File(Path); //判斷文件是否可執行 System.out.println("f是否可執行:" + f.canExecute()); //判斷文件是否存在 System.out.println("f是否存在:" + f.exists()); //判斷文件是否可讀 System.out.println("f是否可讀:" + f.canRead()); //判斷文件是否可寫 System.out.println("f是否可寫:" + f.canWrite()); //判斷文件是否為絕對路徑名 System.out.println("f是否絕對路徑:" + f.isAbsolute()); //判斷文件是否為一個標准文件 System.out.println("f是否為標准文件:" + f.isFile()); //判斷文件是否為一個目錄 System.out.println("f是否為目錄:" + f.isDirectory()); //判斷文件是否隱藏 System.out.println("f是否隱藏:" + f.isHidden()); } }
這里使用不同的文件做測試便可,設置文件屬性什么的也很簡單
需要注意的是,如果使用isFlie()和isDirectory()進行測試,則先要確定文件對象是否已經創建
實例4:創建目錄
import java.io.File; public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator; //path在此處作為父目錄存在 File f1 = new File(path,"/abc"); File f2 = new File(path,"/d/e/f/g"); //創建一個目錄 System.out.println(f1.mkdir()); //遞歸創建目錄 System.out.println(f2.mkdirs()); } }
注意看路徑
實例5:獲取文件信息
import java.io.File; public class Demo { public static void main(String[] args) { String path = File.separator + "home" + File.separator + "siu" + File.separator + "work" + File.separator + "demo.txt"; File f = new File(path); //返回文件的絕對路徑 //此處返回值為String System.out.println("f的絕對路徑名:" + f.getAbsolutePath()); //返回文件的絕對路徑 //此處返回值為File System.out.println("f的絕對路徑對象:" + f.getAbsoluteFile()); //返回文件或目錄的名稱 System.out.println("f的名稱:" + f.getName()); //返回文件的相對路徑 //構造函數中封裝的是什么路徑,就返回什么路徑 System.out.println("f的路徑:" + f.getPath()); //返回父目錄的路徑 //如果在構造函數中的路徑不是絕對路徑,那么此處返回null System.out.println("f的父目錄:" + f.getParent()); } }
這些都是比較常用並且功能類似的方法,至於不常用的信息獲取參考API即可
實例6:列出文件系統的根目錄
import java.io.File; public class Demo { public static void main(String[] args) { //listRoots()是一個靜態方法,返回文件數組 File[] files = File.listRoots(); //foreach循環打印File對象 for (File x : files) { System.out.println(x); } } }
因為本地環境是Linux,所以根目錄只有一個 /,如果是Windows就能列出你的所有盤符
實例7:列出目錄下的所有文件
import java.io.File; public class Demo { public static void main(String[] args) { String path = File.separator + "opt" + File.separator; File f = new File(path); //方式一:list() //返回一個包含指定目錄下所有文件名的字符串數組 //如果不是一個目錄則返回null String[] files = f.list(); for (String x : files) { System.out.println(x); } //方式二:listFiles() //返回File數組 /* File[] files = f.listFiles(); for (File x : files) { //如果需要包含路徑,則直接打印x即可 System.out.println(x.getName()); } */ } }
兩者都是返回目錄下的所有文件名,但是第二種方式更實用,為遞歸列出文件做鋪墊
實例8:遞歸列出目錄下所有文件
import java.io.File; public class Demo { public static void main(String[] args) { String path = File.separator + "opt" + File.separator; File f = new File(path); //調用下面的遞歸方法 print(f); } //用遞歸的方式打印目錄列表 public static void print(File f) { if(f.isDirectory()){ File[] files = f.listFiles(); for(File x : files) { print(x); } } else { System.out.println(f); } } }
好吧,打印內容太多了,意思意思就行了
關於文件的基本操作就講到這,想到再繼續補充……
下續章節將講解java io的其他操作