1.File類
1.1File類概述
? ? SUN公司提供給程序員操作文件以及文件夾對應(yīng)的類入偷。這里涉及到對于文件以及文件夾的增刪改查操作
? ? ? ? 不能操作文件內(nèi)容,不能對于文件進(jìn)行讀寫操作殿雪。IO流內(nèi)容
1.2路徑問題
? ? 相對路徑
? ? 以你當(dāng)前的路徑為參照物
? ? 絕對路徑
? ? 唯一明確的路徑
開發(fā)中
? ? 相對路徑
? ? 針對當(dāng)前工作目錄丙曙,去往其他目錄最短路徑,相對路徑
? ? .當(dāng)前工作目錄
? ? ..當(dāng)前工作目錄的上級目錄
? ? 絕對路徑
? ? Windows 操作系統(tǒng)絕對路徑是從當(dāng)前盤符開始扯旷,C D E F
? ? Linux macOS Unix 根目錄 / 所有路徑都是從根目錄開始钧忽,后期使用的服務(wù)器軟件都是采用對應(yīng)方式
1.3File類構(gòu)造方法
File(String pathName);
? ? 根據(jù)指定的文件路徑耸黑,或者文件夾路徑崎坊,創(chuàng)建對應(yīng)的File類對象奈揍。路徑是相對路徑男翰,可以是絕對路徑
File(String parent蛾绎,String childName)鸦列;
? ? 根據(jù)指定的父目錄文件夾路徑薯嗤,和子文件或者子文件夾的名字,創(chuàng)建對應(yīng)的File類對象
File(File parent镜粤,String childName)肉渴;
? ? 根據(jù)指定的父目錄File類對象同规,和子文件或者子文件的名字券勺,創(chuàng)建對應(yīng)的File類對象
【注意】
1文件名
2拓展名/后綴名/格式名
文件路徑分隔符
? ? Windows Linux 都支持 / 作為文件分隔符
? ? Windows 默認(rèn)采用 \ 作為文件分隔符 \\
? ? File.separator 根據(jù)當(dāng)前操作系統(tǒng),文件系統(tǒng)匹配文件分隔符
package com.test;
import java.io.File;
public class Demo3 {
public static void main(String[] args) {
File file1 = new File("H" + File.separator + "aaa" + File.separator + "1.txt");
File file2 = new File("H:/aaa/1.txt");
File file3 = new File("H:/aaa","1.txt");
File file4 = new File(new File("H:/aa"), "1.txt");
System.out.println(file1);
System.out.println(file2);
System.out.println(file3);
System.out.println(file4);
File file = new File(".");
System.out.println(file.getAbsolutePath());
File file5 = new File("..");
System.out.println(file5.getAbsolutePath());
}
}
1.4創(chuàng)建文件或者文件夾
boolean createNewFile()朱灿;
? ? 通過File類對象調(diào)用,創(chuàng)建File類對象中對應(yīng)地址的普通文件钠四,創(chuàng)建成功返回true盗扒,創(chuàng)建失敗返回false;
? ? 失敗原因
1路徑不合法缀去,路徑不存在侣灶,路徑錯(cuò)誤。
2對應(yīng)文件夾沒有寫入權(quán)限缕碎。
D:/aaa/bb/cc/1.txt
3對應(yīng)文件已經(jīng)存在
4磁盤壞掉褥影,電腦藍(lán)屏
boolean mkdir();
通過File類對象創(chuàng)建咏雌,創(chuàng)建File類對象中對應(yīng)的文件夾凡怎,創(chuàng)建成功返回true赊抖,返回失敗false
【原因】
1路徑不合法,路徑不存在浴鸿,路徑錯(cuò)誤
2對應(yīng)文件沒有寫入權(quán)限
3對應(yīng)文件夾已經(jīng)存在
4磁盤壞掉,電腦藍(lán)屏
boolean mkdirs();
操作很變態(tài)
創(chuàng)建文件夾過程中可以完成中間路徑
boolean renameTo(File dest);
? ? 通過File類對象調(diào)用,轉(zhuǎn)為目標(biāo)dest指定File類對象供填,可以操作普通文件,可以操作文件夾薇缅,移動(dòng)娩缰,重命名
package com.test;
import java.io.File;
import java.io.IOException;
public class Demo4 {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\Administrator\\Desktop");
boolean ret = file.createNewFile();
System.out.println("createNewFile :" + ret);
File file2 = new File("C:\\Users\\Administrator\\Desktop\\aaa");
boolean ret1 = file2.mkdir();
System.out.println("mkdir:" + ret1);
File file3 = new File("C:\\Users\\Administrator\\Desktop\\aaa\\12\\33\44\\54");
boolean mkdirs = file3.mkdir();
System.out.println("mkdir" + mkdirs);
File file6 = new File("C:\\Users\\Administrator\\Desktop\\1.txt");
File file7 = new File("C:\\Users\\Administrator\\Desktop\\nisafha.txt");
boolean renameTo = file6.renameTo(file7);
System.out.println("renameTo :" + renameTo);
}
}
1.5刪除文件或者文件夾
boolean delete()亲轨;
通過File類對象調(diào)用讯嫂,刪除File類對象對應(yīng)的文件或者文件夾
【注意】
1從磁盤中直接抹掉數(shù)據(jù)莉掂,慎用
2刪除操作只針對空文件夾操作曲楚,不能刪除非空文件夾
viod deleteOnExit();
? ? 程序退出之后鹤树,刪除調(diào)用該方法File類對象,對應(yīng)的普通文件或者文件夾
用于緩沖文件,緩存問題灭美,日志文件
package com.test;
import java.io.File;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\1\\1.txt");
boolean delete = file.delete();
System.out.println("delete" + delete);
File file2 = new File("C:\\Users\\Administrator\\Desktop\\1\\ccc");
boolean delete2 = file2.delete();
System.out.println("delete" + delete2);
File file3 = new File("C:\\Users\\Administrator\\Desktop\\1\\2.txt");
file3.deleteOnExit();
new Scanner(System.in).nextLine();
}
}
1.6獲取文件或者文件夾數(shù)據(jù)
方法和文件或者文件夾是否存在無關(guān)
String getPath()犁苏;
獲取File類對象中保存路徑
String getName()助赞;
獲取File類對象操作對應(yīng)的文件名或者文件夾名
String getParent();
獲取File類對象操作文件或者文件夾的上級目錄
String getAbsolutePath()群叶;
獲取當(dāng)前File類隊(duì)象對應(yīng)路徑的絕對路徑
String path = “C : /aaa/bbb/1.txt”;
方法1
"C:/aaa/bbb/1.txt";
方法2
"1.txt"
lastindexOf()獲取/最后出現(xiàn)下標(biāo)
subString()截取上下標(biāo)之后字符串
方法3
"C:/aaa/bbb"
lastindexOf()獲取/最后出現(xiàn)下標(biāo)
subString()截取上下之前字符串
package com.test;
import java.io.File;
public class Demo6 {
public static void main(String[] args) {
File file = new File("D:/aaa/bbb/ccc/1.txt");
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(new File(".").getAbsolutePath());
System.out.println(new File(".").getAbsoluteFile());
}
}
1.7判斷方法
boolean isFile()约炎;
判斷當(dāng)前File類對象對應(yīng)的是不是普通文件
boolean isDirecyory()狸捕;
判斷當(dāng)前File類對象對應(yīng)的是不是文件夾
boolean exists();
判斷當(dāng)前File類對象對應(yīng)的內(nèi)容是否存在
boolean isAbsolute()轩性;
判斷當(dāng)前File類對象保存的路徑是不是絕對路徑
boolean isHidden();
判斷當(dāng)前File類對象對應(yīng)的文件是不是一個(gè)影藏文件
package com.test;
import java.io.File;
public class Demo7 {
public static void main(String[] args) {
File file = new File("C:/Users/53431/Desktop/aaa/ccc");
System.out.println("文件是否存在" + file.exists());
System.out.println("是否是普通文件" + file.isFile());
System.out.println("是否是文件夾" + file.isDirectory());
System.out.println("是否采用絕對路徑" + file.isAbsolute());
System.out.println("是否隱藏文件" + file.isHidden());
}
}
1.8文件列表法
static File[] listRoots()坑质;
獲取Windows操作系統(tǒng)下的所有盤符
Linux中沒有什么作用
String[] list();
獲取File類對象對應(yīng)文件夾中所有子文件或者子文件夾名字萎津,Striing類型數(shù)組
File[] listFile()遂黍;
獲取File類對象對應(yīng)文件夾中所有子文件或者子文件夾的File類對象數(shù)組
1.9FilenameFilter文件過濾器接口
FilenameFilter是文件名過濾器,用于File類的文件列表方法芬位,可以控制保存在列表中的數(shù)據(jù)內(nèi)容
boolean accept(File dir 永丝, String name)嗅辣;
dir是當(dāng)前操作獲取文件列表的文件夾File類對象
name是當(dāng)前文件夾下的文件名戶或者文件夾名
需要完成一個(gè)功能
存在一個(gè)文件夾杆兵,里面有各式各樣的文件和文件夾
想得到所有的【.java文件】
endsWith
isFile
package com.test;
import java.io.File;
import java.io.FilenameFilter;
public class Demoo {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\aaa");
String[] list = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return new File(dir, name).isFile()&& name.endsWith(".java");
}
});
for (String string : list) {
System.out.println(string);
}
System.out.println();
File[] listFiles = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return new File(dir, name).isFile() && name.endsWith(".java");
}
});
}
}