Java——File類,遞歸
阿新 • • 發佈:2018-02-09
.exe cheng accep accept 絕對路徑 pos absolut 對象傳遞 exce
一、File類
獲取路徑或目錄分隔符
public static void main(String[] args) { //File類靜態成員變量 //與系統有關的路徑分隔符 String separator = File.pathSeparator; System.out.println(separator);// 是一個分號,目錄的分割 Linux : //與系統有關的默認名稱分隔符 separator = File.separator; System.out.println(separator);// 向右 \ 目錄名稱分割 Linux / }
1、3種構造方式
/* * File(File parent,String child) * 傳遞路徑,傳遞File類型父路徑,字符串子路徑 * 好處: 父路徑是File類型,父路徑可以直接調用File類方法 */ public static void function_2(){ File parent = new File("d:"); File file = new File(parent,"eclipse"); System.out.println(file); } /* * File(String parent,String child) * 傳遞路徑,傳遞字符串父路徑,字符串子路徑 * 好處: 單獨操作父路徑和子路徑 */ public static void function_1(){ File file = new File("d:","eclipse"); System.out.println(file); } /* * File(String pathname) * 傳遞路徑名: 可以寫到文件夾,可以寫到一個文件 * c:\\abc c:\\abc\\Demo.java * 將路徑封裝File類型對象 */ public static void function(){ File file = new File("d:\\eclipse"); System.out.println(file); }
2、創建文件
/* * File創建文件的功能 * boolean createNewFile() * 創建的文件路徑和文件名,在File構造方法中給出 * 文件已經存在了,不再創建,返回值為false */ public static void function()throws IOException{ File file = new File("c:\\a.txt"); boolean b = file.createNewFile(); System.out.println(b); }
3、創建文件夾
/* * File創建文件夾功能 * boolean mkdirs() 創建多層文件夾 * 創建的路徑也在File構造方法中給出 * 文件夾已經存在了,不再創建,返回值為false */ public static void function_1(){ File file = new File("c:\\abc"); boolean b = file.mkdirs(); System.out.println(b); }
4、刪除文件和文件夾
/* * File類的刪除功能 * boolean delete() * 刪除的文件或者是文件夾,在File構造方法中給出 * 刪除成功返回true,刪除失敗返回false * 刪除方法,不走回收站,直接從硬盤中刪除 * 刪除有風險,運行需謹慎 */ public static void function_2(){ File file = new File("c:\\a.txt"); boolean b = file.delete(); System.out.println(b); }
5、獲取文件或文件夾的名字
/* * File類的獲取功能 * String getName() * 返回路徑中表示的文件或者文件夾名 * 獲取路徑中的最後部分的名字 */ public static void function(){ File file = new File("d:\\eclipse\\eclipse.exe"); String name = file.getName(); System.out.println(name); }
6、獲取文件中的字節數
/* * File類獲取功能 * long length() * 返回路徑中表示的文件的字節數 */ public static void function_1(){ File file = new File("d:\\eclipse\\eclipse.exe"); long length = file.length(); System.out.println(length); }
7、獲取絕對路徑
/* * File類獲取功能 * String getAbsolutePath() 返回String對象 * File getAbsoluteFile() 返回File對象 */ public static void function_2(){ File file = new File("src"); File absolute = file.getAbsoluteFile(); System.out.println(absolute); }
8、獲取父路徑
/* * File類的獲取功能 * String getParent() 返回String對象 * File getParentFile()返回File對象 * 獲取父路徑 */ public static void function_3(){ File file = new File("d:\\eclipse\\eclipse.exe"); File parent = file.getParentFile(); System.out.println(parent); }
9、判斷路徑是否存在
/* * File判斷功能 * boolean exists() * 判斷File構造方法中封裝路徑是否存在 * 存在返回true,不存在返回false */ public static void function(){ File file = new File("src"); boolean b = file.exists(); System.out.println(b); }
10、判斷是否為文件/文件夾
/* * File判斷功能 * boolean isDirectory() * 判斷File構造方法中封裝的路徑是不是文件夾 * 如果是文件夾,返回true,不是文件返回false * * boolean isFile() * 判斷File構造方法中封裝的路徑是不是文件 */ public static void function_1(){ File file = new File("d:\\eclipse\\eclipse.exe"); if(file.exists()){ boolean b = file.isDirectory(); System.out.println(b); } }
11、遍歷目錄下所有文件
/* * File類的獲取功能 * File[] listFiles() * 獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回的是目錄或者文件的全路徑 */ public static void function_1(){ File file = new File("d:\\eclipse"); File[] fileArr = file.listFiles(); for(File f : fileArr){ System.out.println(f); } } /* * File類的獲取功能 * String[] list() * 獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回只有名字 */ public static void function(){ File file = new File("c:"); String[] strArr = file.list(); System.out.println(strArr.length); for(String str : strArr){ System.out.println(str); } }
12、文件過濾器
需要我們自己寫一個過濾器
import java.io.File; import java.io.FileFilter; /* * 自定義過濾器 * 實現FileFilter接口,重寫抽象方法 */ public class MyFilter implements FileFilter{ public boolean accept(File pathname) { /* * pathname 接受到的也是文件的全路徑 * c:\\demo\\1.txt * 對路徑進行判斷,如果是java文件,返回true,不是java文件,返回false * 文件的後綴結尾是.java */ //String name = pathname.getName(); return pathname.getName().endsWith(".java"); } }
然後在listfiles中添加它的匿名對象
import java.io.File; /* * File類的獲取,文件獲取過濾器 * 遍歷目錄的時候,可以根據需要,只獲取滿足條件的文件 * 遍歷目錄方法 listFiles()重載形式 * listFiles(FileFilter filter)接口類型 * 傳遞FileFilter接口的實現類 * 自定義FileFilter接口實現類,重寫抽象方法, * 接口實現類對象傳遞到遍歷方法listFiles */ public class FileDemo1 { public static void main(String[] args) { File file = new File("c:\\demo"); File[] fileArr = file.listFiles(new MyFilter()); for(File f : fileArr){ System.out.println(f); } } }
二、遞歸
示例:
/* * 方法的遞歸調用 * 方法自己調用自己 * 適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化 * 註意: * 遞歸一定要有出口, 必須可以讓程序停下 * 遞歸次數不能過多 * 構造方法,禁止遞歸 */ public class DiGuiDemo { public static void main(String[] args) { /*int sum = getSum(3); System.out.println(sum);*/ System.out.println(getJieCheng(5)); System.out.println(getFBNQ(12)); } /* * 方法遞歸,計算斐波那契數列 * */ public static int getFBNQ(int month){ if( month == 1) return 1; if( month == 2) return 1; return getFBNQ(month-1)+getFBNQ(month-2); } /* * 計算階乘 5! * 5*4*3*2*1 */ public static int getJieCheng(int n){ if ( n == 1) return 1; return n * getJieCheng(n-1); } /* * 計算 1+2+3+100和 = 5050 * 計算規律: * n+(n-1)+(n-2) * 100+(100-1)+(99-1)+...1 */ public static int getSum(int n){ if( n == 1) return 1; return n + getSum(n-1); } }
如果我們想遍歷目錄下所有的文件,就可以用這種方法
/* * 定義方法,實現目錄的全遍歷 */ public static void getAllDir(File dir){ System.out.println(dir); //調用方法listFiles()對目錄,dir進行遍歷 File[] fileArr = dir.listFiles(); for(File f : fileArr){ //判斷變量f表示的路徑是不是文件夾 if(f.isDirectory()){ //是一個目錄,就要去遍歷這個目錄 //本方法,getAllDir,就是給個目錄去遍歷 //繼續調用getAllDir,傳遞他目錄 getAllDir(f); }else{ System.out.println(f); } } }
Java——File類,遞歸