1. File類(lèi)概述
文件和目錄路徑名的抽象表示形式问潭,表示一個(gè)文件或文件夾,并提供了一系列操作文件或文件夾的方法
2. 構(gòu)造方法
方法 | 功能描述 |
---|---|
File(String pathname) | 根據(jù)路徑得到File對(duì)象 |
File(String parent,String child) | 根據(jù)目錄和子文件/目錄得到對(duì)象 |
File(File parent,String child) | 根據(jù)父File對(duì)象和子文件/目錄得到對(duì)象 |
示例代碼
package cn.itcast_01;
import java.io.File;
/*
* 我們要想實(shí)現(xiàn)IO的操作,就必須知道硬盤(pán)上文件的表現(xiàn)形式昂羡。
* 而Java就提供了一個(gè)類(lèi)File供我們使用阀参。
*
* File:文件和目錄(文件夾)路徑名的抽象表示形式
* 構(gòu)造方法:
* File(String pathname):根據(jù)一個(gè)路徑得到File對(duì)象
* File(String parent, String child):根據(jù)一個(gè)目錄和一個(gè)子文件/目錄得到File對(duì)象
* File(File parent, String child):根據(jù)一個(gè)父File對(duì)象和一個(gè)子文件/目錄得到File對(duì)象
*/
public class FileDemo {
public static void main(String[] args) {
// File(String pathname):根據(jù)一個(gè)路徑得到File對(duì)象
// 把e:\\demo\\a.txt封裝成一個(gè)File對(duì)象
File file = new File("E:\\demo\\a.txt");
// File(String parent, String child):根據(jù)一個(gè)目錄和一個(gè)子文件/目錄得到File對(duì)象
File file2 = new File("E:\\demo", "a.txt");
// File(File parent, String child):根據(jù)一個(gè)父File對(duì)象和一個(gè)子文件/目錄得到File對(duì)象
File file3 = new File("e:\\demo");
File file4 = new File(file3, "a.txt");
// 以上三種方式其實(shí)效果一樣
}
}
3. 創(chuàng)建功能
返回值 | 方法 | 功能描述 |
---|---|---|
boolean | createNewFile() | 創(chuàng)建文件 |
boolean | mkdir() | 創(chuàng)建文件夾 |
boolean | mkdirs() | 創(chuàng)建多級(jí)文件夾,如果父級(jí)文件夾不存在瞪讼,會(huì)自動(dòng)創(chuàng)建 |
File | createTempFile() | 創(chuàng)建一個(gè)用于緩存的臨時(shí)文件 |
代碼示例
package cn.itcast_02;
import java.io.File;
import java.io.IOException;
/*
*創(chuàng)建功能:
*public boolean createNewFile():創(chuàng)建文件 如果存在這樣的文件钧椰,就不創(chuàng)建了
*public boolean mkdir():創(chuàng)建文件夾 如果存在這樣的文件夾,就不創(chuàng)建了
*public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在尝艘,會(huì)幫你創(chuàng)建出來(lái)
*/
public class FileDemo {
public static void main(String[] args) throws IOException {
// 需求:我要在e盤(pán)目錄下創(chuàng)建一個(gè)文件夾demo
File file = new File("e:\\demo");
System.out.println("mkdir:" + file.mkdir());
// 需求:我要在e盤(pán)目錄demo下創(chuàng)建一個(gè)文件a.txt
File file2 = new File("e:\\demo\\a.txt");
System.out.println("createNewFile:" + file2.createNewFile());
// 需求:我要在e盤(pán)目錄test下創(chuàng)建一個(gè)文件b.txt
// Exception in thread "main" java.io.IOException: 系統(tǒng)找不到指定的路徑演侯。
// 注意:要想在某個(gè)目錄下創(chuàng)建內(nèi)容,該目錄首先必須存在背亥。
// File file3 = new File("e:\\test\\b.txt");
// System.out.println("createNewFile:" + file3.createNewFile());
// 需求:我要在e盤(pán)目錄test下創(chuàng)建aaa目錄
// File file4 = new File("e:\\test\\aaa");
// System.out.println("mkdir:" + file4.mkdir());
// File file5 = new File("e:\\test");
// File file6 = new File("e:\\test\\aaa");
// System.out.println("mkdir:" + file5.mkdir());
// System.out.println("mkdir:" + file6.mkdir());
// 其實(shí)我們有更簡(jiǎn)單的方法
File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd");
System.out.println("mkdirs:" + file7.mkdirs());
// 看下面的這個(gè)東西:
File file8 = new File("e:\\liuyi\\a.txt");
System.out.println("mkdirs:" + file8.mkdirs());
}
}
4. 刪除功能
返回值 | 方法 | 功能描述 |
---|---|---|
boolean | delete() | 刪除文件或文件夾 |
代碼示例
package cn.itcast_03;
import java.io.File;
import java.io.IOException;
/*
* 刪除功能:public boolean delete()
*
* 注意:
* A:如果你創(chuàng)建文件或者文件夾忘了寫(xiě)盤(pán)符路徑秒际,那么悬赏,默認(rèn)在項(xiàng)目路徑下。
* B:Java中的刪除不走回收站娄徊。
* C:要?jiǎng)h除一個(gè)文件夾闽颇,請(qǐng)注意該文件夾內(nèi)不能包含文件或者文件夾
*/
public class FileDemo {
public static void main(String[] args) throws IOException {
// 創(chuàng)建文件
// File file = new File("e:\\a.txt");
// System.out.println("createNewFile:" + file.createNewFile());
// 我不小心寫(xiě)成這個(gè)樣子了
File file = new File("a.txt");
System.out.println("createNewFile:" + file.createNewFile());
// 繼續(xù)玩幾個(gè)
File file2 = new File("aaa\\bbb\\ccc");
System.out.println("mkdirs:" + file2.mkdirs());
// 刪除功能:我要?jiǎng)h除a.txt這個(gè)文件
File file3 = new File("a.txt");
System.out.println("delete:" + file3.delete());
// 刪除功能:我要?jiǎng)h除ccc這個(gè)文件夾
File file4 = new File("aaa\\bbb\\ccc");
System.out.println("delete:" + file4.delete());
// 刪除功能:我要?jiǎng)h除aaa文件夾
// File file5 = new File("aaa");
// System.out.println("delete:" + file5.delete());
File file6 = new File("aaa\\bbb");
File file7 = new File("aaa");
System.out.println("delete:" + file6.delete());
System.out.println("delete:" + file7.delete());
}
}
5. 重命名功能
方法 | 功能描述 |
---|---|
renamneTo(File dest) | 路徑名相同就是重命名,不一樣就是改名加剪切 |
代碼示例
package cn.itcast_04;
import java.io.File;
/*
* 重命名功能:public boolean renameTo(File dest)
* 如果路徑名相同寄锐,就是改名兵多。
* 如果路徑名不同,就是改名并剪切橄仆。
*
* 路徑以盤(pán)符開(kāi)始:絕對(duì)路徑 c:\\a.txt
* 路徑不以盤(pán)符開(kāi)始:相對(duì)路徑 a.txt
*/
public class FileDemo {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)文件對(duì)象
// File file = new File("林青霞.jpg");
// // 需求:我要修改這個(gè)文件的名稱(chēng)為"東方不敗.jpg"
// File newFile = new File("東方不敗.jpg");
// System.out.println("renameTo:" + file.renameTo(newFile));
File file2 = new File("東方不敗.jpg");
File newFile2 = new File("e:\\林青霞.jpg");
System.out.println("renameTo:" + file2.renameTo(newFile2));
}
}
6. 判斷功能
方法 | 功能描述 |
---|---|
isDirectory() | 判斷是否是目錄 |
isFile() | 判斷是否是文件 |
exists() | 判斷是否是存在 |
canRead() | 判斷是否是可讀 |
canWrite() | 判斷是否是可寫(xiě) |
isHidden() | 判斷是否是隱藏 |
示例代碼
import java.io.File;
/*
* 判斷功能:
* public boolean isDirectory():判斷是否是目錄
* public boolean isFile():判斷是否是文件
* public boolean exists():判斷是否存在
* public boolean canRead():判斷是否可讀
* public boolean canWrite():判斷是否可寫(xiě)
* public boolean isHidden():判斷是否隱藏
*/
public class FileDemo {
public static void main(String[] args) {
// 創(chuàng)建文件對(duì)象
File file = new File("a.txt");
System.out.println("isDirectory:" + file.isDirectory());// false
System.out.println("isFile:" + file.isFile());// true
System.out.println("exists:" + file.exists());// true
System.out.println("canRead:" + file.canRead());// true
System.out.println("canWrite:" + file.canWrite());// true
System.out.println("isHidden:" + file.isHidden());// false
}
}
7. 獲取功能
返回值 | 方法 | 功能描述 |
---|---|---|
String | getAbsolutePath() | 獲取絕對(duì)路徑 |
String | getPath() | 獲取相對(duì)路徑 |
String | getName() | 獲取名稱(chēng) |
long | getFreeSpace() | 獲取剩余可用空間 |
long | getTotalSpace() | 獲取總大小 |
long | length() | 獲取長(zhǎng)度剩膘,字節(jié)數(shù) |
long | lastModified() | 獲取最后一次修改時(shí)間,毫秒值 |
String[] | list() | 獲取指定目錄下的所有文件或文件夾的名稱(chēng)數(shù)組 |
File[] | listFiles() | 獲取指定目錄下的所有文件或文件夾的File數(shù)組 |
代碼示例
package cn.itcast_06;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 獲取功能:
* public String getAbsolutePath():獲取絕對(duì)路徑
* public String getPath():獲取相對(duì)路徑
* public String getName():獲取名稱(chēng)
* public long length():獲取長(zhǎng)度盆顾。字節(jié)數(shù)
* public long lastModified():獲取最后一次的修改時(shí)間怠褐,毫秒值
*/
public class FileDemo {
public static void main(String[] args) {
// 創(chuàng)建文件對(duì)象
File file = new File("demo\\test.txt");
System.out.println("getAbsolutePath:" + file.getAbsolutePath());
System.out.println("getPath:" + file.getPath());
System.out.println("getName:" + file.getName());
System.out.println("length:" + file.length());
System.out.println("lastModified:" + file.lastModified());
// 1416471971031
Date d = new Date(1416471971031L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
}
}
運(yùn)行結(jié)果:
8. 高級(jí)獲取功能
package cn.itcast_07;
import java.io.File;
/*
* 高級(jí)獲取功能:
* public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱(chēng)數(shù)組
* public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
*/
public class FileDemo {
public static void main(String[] args) {
// 指定一個(gè)目錄
File file = new File("e:\\");
// public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱(chēng)數(shù)組
String[] strArray = file.list();
for (String s : strArray) {
System.out.println(s);
}
System.out.println("------------");
// public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
}
}
}
運(yùn)行結(jié)果:
9. 文件過(guò)濾器
返回值 | 方法 | 功能描述 |
---|---|---|
String[] | list(FilenameFilter filter) | 返回滿(mǎn)足條件的文件名數(shù)組 |
File[] | listFiles(FilenameFilter filter) | 返回滿(mǎn)足條件的文件數(shù)組 |
10. File練習(xí)
文件名稱(chēng)過(guò)濾器的實(shí)現(xiàn)思想及代碼
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
10.1 文件名稱(chēng)過(guò)濾器的實(shí)現(xiàn)
package cn.itcast_08;
import java.io.File;
import java.io.FilenameFilter;
/*
* 判斷E盤(pán)目錄下是否有后綴名為.jpg的文件,如果有您宪,就輸出此文件名稱(chēng)
* A:先獲取所有的奈懒,然后遍歷的時(shí)候,依次判斷宪巨,如果滿(mǎn)足條件就輸出磷杏。
* B:獲取的時(shí)候就已經(jīng)是滿(mǎn)足條件的了,然后輸出即可捏卓。
*
* 要想實(shí)現(xiàn)這個(gè)效果极祸,就必須學(xué)習(xí)一個(gè)接口:文件名稱(chēng)過(guò)濾器
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FilenameFilter filter)
*/
public class FileDemo2 {
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\");
// 獲取該目錄下所有文件或者文件夾的String數(shù)組
// public String[] list(FilenameFilter filter)
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// return false;
// return true;
// 通過(guò)這個(gè)測(cè)試,我們就知道了天吓,到底把這個(gè)文件或者文件夾的名稱(chēng)加不加到數(shù)組中贿肩,取決于這里的返回值是true還是false
// 所以,這個(gè)的true或者false應(yīng)該是我們通過(guò)某種判斷得到的
// System.out.println(dir + "---" + name);
// File file = new File(dir, name);
// // System.out.println(file);
// boolean flag = file.isFile();
// boolean flag2 = name.endsWith(".jpg");
// return flag && flag2;
return new File(dir, name).isFile() && name.endsWith(".jpg");
}
});
// 遍歷
for (String s : strArray) {
System.out.println(s);
}
}
}
10.2 遞歸遍歷目錄下指定后綴名結(jié)尾的文件名稱(chēng)
package cn.itcast_03;
import java.io.File;
/*
* 需求:把E:\JavaSE目錄下所有的java結(jié)尾的文件的絕對(duì)路徑給輸出在控制臺(tái)龄寞。
*
* 分析:
* A:封裝目錄
* B:獲取該目錄下所有的文件或者文件夾的File數(shù)組
* C:遍歷該File數(shù)組汰规,得到每一個(gè)File對(duì)象
* D:判斷該File對(duì)象是否是文件夾
* 是:回到B
* 否:繼續(xù)判斷是否以.java結(jié)尾
* 是:就輸出該文件的絕對(duì)路徑
* 否:不搭理它
*/
public class FilePathDemo {
public static void main(String[] args) {
// 封裝目錄
File srcFolder = new File("E:\\JavaSE");
// 遞歸功能實(shí)現(xiàn)
getAllJavaFilePaths(srcFolder);
}
private static void getAllJavaFilePaths(File srcFolder) {
// 獲取該目錄下所有的文件或者文件夾的File數(shù)組
File[] fileArray = srcFolder.listFiles();
// 遍歷該File數(shù)組,得到每一個(gè)File對(duì)象
for (File file : fileArray) {
// 判斷該File對(duì)象是否是文件夾
if (file.isDirectory()) {
getAllJavaFilePaths(file);
} else {
// 繼續(xù)判斷是否以.java結(jié)尾
if (file.getName().endsWith(".java")) {
// 就輸出該文件的絕對(duì)路徑
System.out.println(file.getAbsolutePath());
}
}
}
}
}
運(yùn)行結(jié)果:
10.3 遞歸刪除帶內(nèi)容的目錄
package cn.itcast_03;
import java.io.File;
/*
* 需求:遞歸刪除帶內(nèi)容的目錄
*
* 分析:
* A:封裝目錄
* B:獲取該目錄下的所有文件或者文件夾的File數(shù)組
* C:遍歷該File數(shù)組物邑,得到每一個(gè)File對(duì)象
* D:判斷該File對(duì)象是否是文件夾
* 是:回到B
* 否:就刪除
*/
public class FileDeleteDemo {
public static void main(String[] args) {
// 封裝目錄
File srcFolder = new File("demo");
// 遞歸實(shí)現(xiàn)
deleteFolder(srcFolder);
}
private static void deleteFolder(File srcFolder) {
// 獲取該目錄下的所有文件或者文件夾的File數(shù)組
File[] fileArray = srcFolder.listFiles();
if (fileArray != null) {
// 遍歷該File數(shù)組溜哮,得到每一個(gè)File對(duì)象
for (File file : fileArray) {
// 判斷該File對(duì)象是否是文件夾
if (file.isDirectory()) {
deleteFolder(file);
} else {
System.out.println(file.getName() + "---" + file.delete());
}
}
System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
}
}
}
運(yùn)行結(jié)果: