一.File類
一. File類的創建
1.File類定義:
java.io.File 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。
2.用構造方法創建File類
1).public File(String pathname) //通過將給定的路徑名字符串轉換爲抽象路徑名來創建新的 File實例。
eg:
String pathname="D:\\aa.txt";//定義一個路徑
File file1=new File(pathname);
System.out.println(file1);
2).public File(String parent, String child) //從父路徑名字符串和子路徑名字符串創建新的 File實例。
eg:
String parent="d:\\aaa";//定義父路徑
String child="bbb.txt";//定義子路徑
File file=new File(parent,child);
3).public File(File parent, String child) //從父抽象路徑名和子路徑名字符串創建新的 File實例。
eg:
File parentDir=new File("d:\\aaa");
String child1="bbb.txt";
File files=new File(parentDir,child);
3.創建文件或目錄
1)文件的創建
public boolean createNewFile() //當且僅當具有該名稱的文件尚不存在時,創建一個新的空文件。
2)目錄的創建
(1)創建單級目錄:public boolean mkdir() //創建由此File表示的目錄,包括任何必需但不存在的父目錄。
(2)創建多級目錄:public boolean mkdirs()
PS:
1.一個File對象代表硬盤中實際存在的一個文件或者目錄。
2.無論該路徑下是否存在文件或者目錄,都不影響File對象的創建。
3.因爲創建File時不知道是創建的文件還是目錄,所以需要有特定方法進行判斷。
4.關於分隔符:
1)路徑分隔符windows;linux
2)文件名稱分隔符window :反斜槓\ Linux: /正斜槓
正斜槓可以一個,反斜槓必須兩個。
二.絕對路徑和相對路徑
1.絕對路徑:從盤符開始的路徑,這是一個完整的路徑。
eg:
File f=new File("D:\\aaa.java");//D盤下bbb.java-->絕對路徑
System.out.println(f.getAbsolutePath());//輸出結果D:\aaa.java
2.相對路徑:相對於項目目錄的路徑,這是一個便捷的路徑,開發中經常使用。
eg:
File f2=new File("aaa.java");//項目下bbb.java-->相對路徑
System.out.println(f2.getAbsolutePath());
//輸出結果C:\Users\pc\eclipse-workspace\RemoteSystemsTempFiles\FileDemo01\aaa.java
三.File類常用方法
1.基本方法:
1) public String getAbsolutePath() //返回此File的絕對路徑名字符串。
2) public String getPath() //將此File轉換爲路徑名字符串。
3) public String getName() //返回由此File表示的文件或目錄的名稱。
4) public long length() //返回由此File表示的文件的長度。
5) public boolean delete() //刪除由此File表示的文件或目錄。
PS: API中說明: delete方法,如果此File表示目錄,則目錄必須爲空才能刪除。
2.判斷功能的方法
1) public boolean exists() //此File表示的文件或目錄是否實際存在。
2) public boolean isDirectory() //此File表示的是否爲目錄。
3) public boolean isFile() //此File表示的是否爲文件。
四.遍歷目錄下的文件
1. public String[] list() //返回一個String數組,表示該File目錄中的所有子文件或目錄。
eg:
File dir=new File("d:\\Java_Code");
String[] names=dir.list();
for(String name:names) {
System.out.println(name);//輸出文件或子文件名字
}
-
public File[] listFiles() //返回一個File數組,表示該File目錄中的所有的子文件或目錄。
eg: File[] files=dir.listFiles(); for (File file : files) { System.out.println(file);//輸出文件或子文件具體路徑 }
二.遞歸
一.遞歸
1.遞歸概念:指在當前方法中調用自己的現象。
2.遞歸分類:
1) 直接遞歸即爲方法自身調用自己。
2) 間接遞歸可以理解爲A方法調用B方法,B方法調用C方法,C方法調用A方法。
二.遞歸使用注意事項
1. 遞歸一定要有條件限定,保證遞歸能夠停止下來,否則會發生棧內存溢出。
2.在遞歸中雖然有限定條件,但是遞歸次數不能太多。否則也會發生棧內存溢出。
3.構造方法,禁止遞歸
三.遞歸經典實例
1.累加求和
即求n+(n-1)+…+1
public class Demo01{
private static int sum(int n) {
if(n==1) {
return 1;
}
return n+sum(n-1);
}
public static void main(String[] args) {
int s=sum(5);//求1~5之和
System.out.println(s);
}
}
2.遞歸求階乘
即求n*(n-1)*…*1
public class Demo02 {
//遞歸算法求階乘
private static int getValue(int n) {
if(n==1) {
return 1;
}
return n*getValue(n-1);
}
public static void main(String[] args) {
int s=getValue(10);
System.out.println(s);
}
}
3.遞歸打印多級目錄
遞歸打印多級目錄,即爲遍歷多級目錄,目錄的嵌套,打印輸出
import java.io.File;
import java.nio.file.Files;
public class demo03 {
private static void printDir(File dir) {
File[] files=dir.listFiles();
//判斷:當是文件,打印絕對路徑
// 當是目錄時,打印目錄,繼續調用打印目錄形成遞歸
for (File file : files) {
//是文件時
if(file.isFile()) {
System.out.println("文件名"+file.getAbsolutePath());
}else {
//是目錄,輸出目錄絕對路徑
System.out.println("目錄"+file.getAbsolutePath());
//繼續遍歷,調用printDir,形成遞歸
printDir(file);
}
}
}
public static void main(String[] args) {
File dir=new File("D:\\aaa");
printDir(dir);
}
}
四.遞歸與File類綜合實例
文件搜索 ----》搜索D:\aaa目錄中.java文件
1) 常規方法:
import java.io.File;
public class Demo04{
public static void main(String[] args) {
File file=new File("D:\\aaa");
printDir(file);
}
private static void printDir(File dir) {
File[] files=dir.listFiles();
//循環打印
for (File file : files) {
if(file.isFile()) {
//File是文件,判斷文件名並輸出文件絕對路徑
if(file.getName().endsWith(".java")) {
//prefix(前綴)+.suffix(後綴)
System.out.println("文件名"+file.getAbsolutePath());
}
}else {
//File是目錄,繼續遍歷,形成遞歸
printDir(file);
}
}
}
}
2)文件過濾器優化FileFilter
import java.io.File;
import javax.swing.filechooser.FileFilter;
public class Demo06DiGui2 {
public static void main(String[] args) {
File file=new File("D:\\aaa");
printDir(file);
}
private static void printDir(File dir) {
//FileFilter過濾器優化及Lambda表達式優化
File[] files=dir.listFiles(new FileFilter(){
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
});
//lambda優化 ()(參數)->{業務實現}
//有參有返回值lambda表達式
File[] files=dir.listFiles(f->{return f.getName().endsWith(".java")||f.isFile();});
//循環打印
for (File file : files) {
if(file.isFile()) {
//是文件,判斷文件名並輸出文件絕對路徑
if(file.getName().endsWith(".java")) {
System.out.println("文件名"+file.getAbsolutePath());
}
}else {
//是目錄,繼續遍歷,形成遞歸
printDir(file);
}
}
}
}