File類
File類
IO流(Input Output) :
IO技術主要的作用是解決裝置與裝置之間的資料傳輸問題
比如: 硬碟--->記憶體、記憶體的資料---->硬碟上、把鍵盤的資料------->記憶體中
IO技術的應用場景:
匯出報表、上傳大頭照 、下載 、解釋xml檔案 ...
資料儲存到硬碟上,該資料就可以做到永久性的儲存。資料一般是以檔案的形式儲存到硬碟上
sun使用了一個File類描述了檔案或者資料夾的。
File類可以描述一個檔案或者一個資料夾。
一、File類的構造方法
File(String pathname)指定檔案或者資料夾的路徑建立一個File檔案。 File(File parent, String child)根據 parent 抽象路徑名和 child 路徑名字串建立一個新 File 例項。 File(String parent, String child)
目錄分隔符: 在windows機器上的目錄分隔符是 \,在linux機器上的目錄分隔符是/ .通過File.separator就可以獲得對應系統上的分隔符
注意: 在windows上面\ 與 / 都可以使用作為目錄分隔符。 而且,如果寫/ 的時候只需要寫一個即可。
public class Demo1 { public static void main(String[] args) { //File file = new File("F:"+File.separator+"a.txt"); // File file = new File("F:/a.txt"); /*File parentFile = new File("F:\\"); File file = new File("F:\\","a.txt");*/ // exists 判斷該檔案是否存在,存在返回true,否則返回false。 System.out.println("存在嗎? "+ file.exists()); //System.out.println("目錄分隔符:"+ File.separator); } }
路徑問題
- 絕對路徑: 該檔案在硬碟上 的完整路徑。絕對路徑一般都是以碟符開頭的。
- 相對路徑:相對路徑就是資原始檔相對於當前程式所在的路徑。
. 當前路徑
.. 上一級路徑
注意:如果程式當前所在的路徑與資原始檔不是在同一個盤下面,是沒法寫相對路徑的。
public class Demo2 { public static void main(String[] args) { File file = newFile("."); System.out.println("當前路徑是:"+ file.getAbsolutePath()); File file2 = new File("..\\..\\a.txt"); System.out.println("存在嗎?"+ file2.exists()); } }
二、建立方法
- createNewFile()在指定位置建立一個空檔案,成功就返回true,如果已存在就不建立然後返回false
- mkdir()在指定位置建立目錄,這隻會建立最後一級目錄,如果上級目錄不存在就拋異常。
- mkdirs()在指定位置建立目錄,這會建立路徑中所有不存在的目錄。
- renameTo(File dest)重新命名檔案或資料夾,也可以操作非空的資料夾,檔案不同時相當於檔案的剪下,剪下時候不能操作非空的資料夾。移動/重新命名成功則返回true,失敗則返回false。
public class Demo3 { public static void main(String[] args) throws IOException { File file = new File("F:\\aa.txt"); //createNewFile 建立一個指定的檔案,如果該檔案存在了,則不會再建立,如果還沒有存在則建立。 //建立成功返回true,否則返回false。 System.out.println("建立成功了嗎?"+file.createNewFile()); File dir = newFile("F:\\a.txt"); System.out.println("建立資料夾成功嗎?"+dir.mkdir()); // mkdir 建立一個單級資料夾, dir = new File("F:\\aa\\bb"); System.out.println("建立多級資料夾:"+ dir.mkdirs()); //renameTo()如果目標檔案與原始檔是在同一個路徑下,那麼renameTo的作用是重新命名, //如果目標檔案與原始檔不是在同一個路徑下,那麼renameTo的作用就是剪下,而且還不能操作資料夾。 File destFile = new File("F:\\abc.txt"); System.out.println("重新命名成功嗎?"+file.renameTo(destFile)) ; } }
三、刪除方法
- delete() 刪除檔案或一個空資料夾,如果是資料夾且不為空,則不能刪除,成功返回true,失敗返回false。
- deleteOnExit()在虛擬機器終止時,請求刪除此抽象路徑名錶示的檔案或目錄,保證程式異常時建立的臨時檔案也可以被刪除
判斷方法:
- exists()檔案或資料夾是否存在。
- isFile()是否是一個檔案,如果不存在,則始終為false。
- isDirectory() 是否是一個目錄,如果不存在,則始終為false。
- isHidden()是否是一個隱藏的檔案或是否是隱藏的目錄。
- isAbsolute()測試此抽象路徑名是否為絕對路徑名。
public class Demo4 { public static void main(String[] args) { /* 刪除的。 * File file = new File("F:\\a.txt"); System.out.println("刪除成功嗎? "+ file.delete()); //delete方法不能用於刪除非空的資料夾。 delete方法會馬上刪除一個檔案。 file.deleteOnExit();//jvm退出的時候刪除檔案。一般用於刪除臨時 檔案。 System.out.println("哈哈哈"); 判斷 */ File file = new File("..\\..\\a.txt"); System.out.println("存在嗎?"+ file.exists()); System.out.println("判斷是否是一個檔案:"+file.isFile()); //如果是檔案返回true,否則返回false. System.out.println("判斷是否是一個資料夾:"+ file.isDirectory()); // 是資料夾返回ture,否則返回false. System.out.println("是隱藏的 檔案嗎:"+ file.isHidden()); System.out.println("是絕對路嗎?"+ file.isAbsolute()); } }
四、獲取方法
- getName() 獲取檔案或資料夾的名稱,不包含上級路徑。
- getPath() 返回絕對路徑,可以是相對路徑,但是目錄要指定
- getAbsolutePath() 獲取檔案的絕對路徑,與檔案是否存在沒關係
- length()獲取檔案的大小(位元組數),如果檔案不存在則返回0L,如果是資料夾也返回0L。
- getParent()返回此抽象路徑名父目錄的路徑名字串;如果此路徑名沒有指定父目錄,則返回null。
- lastModified() 獲取最後一次被修改的時間。
public classDemo5{ public static void main(String[] args) { File file = new File("..\\..\\a.txt"); System.out.println("檔名:"+ file.getName()); System.out.println("獲取絕對路徑:"+ file.getPath()); System.out.println("getAbsolutePath獲取絕對路徑:"+file.getAbsolutePath()); System.out.println("獲取檔案的的大小(位元組為單位):"+ file.length()); System.out.println("獲取檔案的父路徑:"+ file.getParent()); //使用毫秒值轉換成Date物件 long lastModified = file.lastModified(); Date date = new Date(lastModified); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); System.out.println("獲取最後一次的修改時間(毫秒值):"+ dateFormat.format(date) ); } }
資料夾相關:
- staic File[] listRoots()列出所有的根目錄(Window中就是所有系統的碟符)
- list()返回目錄下的檔案或者目錄名,包含隱藏檔案。對於檔案這樣操作會返回null。
- listFiles()返回目錄下的檔案或者目錄物件(File類例項),包含隱藏檔案。對於檔案這樣操作會返回null。
- list(FilenameFilter filter)返回指定當前目錄中符合過濾條件的子檔案或子目錄。對於檔案這樣操作會返回null。
- listFiles(FilenameFilter filter)返回指定當前目錄中符合過濾條件的子檔案或子目錄。對於檔案這樣操作會返回null。
public class Demo6 { public static void main(String[] args) { /*File[] roots = File.listRoots(); //列出所有的根目錄 for(File file: roots){ System.out.println(file); }*/ File file = new File("F:\\workspace\\mydemo"); /* String[] fileNames = file.list(); //把 當前資料夾下面的所有子檔名與子資料夾名 儲存到一個String型別 的陣列中 返回。 for(String fileName : fileNames){ System.out.println(fileName); }*/ File[] files = file.listFiles(); // 把 當前資料夾下面的所有子檔案與子資料夾都使用了一個FIle物件描述,然後把這些File物件儲存到一個FIle陣列中返回 for(File fileItem : files){ System.out.println("檔名:"+ fileItem.getName()); } } }