File
文件和文件夾(文件路徑)的抽象表示婚陪,是專門來(lái)處理磁盤上面的文件或者文件夾的
之前都是手動(dòng)創(chuàng)建沪摄,現(xiàn)在可以借助Java封裝好的類創(chuàng)建文件夾和文件憎妙。
1File 類的構(gòu)造方法
1.1File(String pathname)
通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來(lái)創(chuàng)建新的 File實(shí)例弃鸦。
1.2File(String parent, String child)
從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實(shí)例听盖。
package com.wyx.b_file;
import java.io.File;
public class Demo1 {
public static void main(String[] args) {
File file = new File("d:/aaa/1.text");
System.out.println(file);
File file1 = new File("d:/aaa/", "1.text");
// java 中路徑分割符問題
// 看系統(tǒng)
// / 在windows系統(tǒng)和Linux系統(tǒng)都可以
// \ 只能在windows系統(tǒng)中可以使用
/**
* static String separator
* 與系統(tǒng)相關(guān)的默認(rèn)名稱 - 分隔符字符胀溺,以方便的方式表示為字符串。
* 當(dāng)你是window系統(tǒng)的時(shí)候 separator就是\
* 當(dāng)你的代碼在linux系統(tǒng)的時(shí)候 separator就是/
*/
System.out.println(File.separator);// 因?yàn)槭窃趙indows系統(tǒng)下皆看,所以輸出是\
//所以為了保證你的代碼在任意的系統(tǒng)下面 路徑的分割符是都可以使用仓坞,可以這樣寫
File file2 = new File("d:" + File.separator + "aaa" + File.separator + "1.text");
System.out.println(file2);
}
}
2File下面的方法
2.1 boolean createNewFile();
創(chuàng)建一個(gè)文件 返回值是布爾類型的數(shù)據(jù)
1.如果文件路徑不存在會(huì)報(bào)錯(cuò)
2.如果文件名字已經(jīng)存在,返回false
3.磁盤壞了腰吟,創(chuàng)建不了
2.2 boolean mkdir();
創(chuàng)建文件夾 返回值是布爾類型的數(shù)據(jù)
創(chuàng)建單級(jí)路徑:只能創(chuàng)建一個(gè)子級(jí)目錄
2.3 boolean mkdirs();
記住這個(gè)就可以了无埃,不僅可以創(chuàng)建單極還可以創(chuàng)建多級(jí)目錄
創(chuàng)建文件夾 返回值是布爾類型的數(shù)據(jù)
創(chuàng)建多級(jí)路徑:可以創(chuàng)建多級(jí)目錄
package com.wyx.b_file;
import java.io.File;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
//在E盤aaa文件下 創(chuàng)建文件1.text
File file = new File("e:/aaa/1.text");
System.out.println(file.createNewFile());
//在E盤aaa文件下 創(chuàng)建文件夾bbb
File file1 = new File("e:/aaa/bbb");
System.out.println(file1.mkdir());
//在E盤aaa文件下 創(chuàng)建文件夾ccc,然后在ccc文件下創(chuàng)建ddd文件夾
File file2 = new File("E:/aaa/ccc/ddd");
System.out.println(file2.mkdirs());
}
}
2.4刪除文件或者文件夾
boolean delete();
立即刪除文件,常用的
void deleteOnExit();
不會(huì)立即刪除毛雇,是程序退出以后才刪除的
delete刪除文件夾的時(shí)候嫉称,只能刪除空的文件夾
package com.wyx.b_file;
import java.io.File;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
//刪除文件
File file = new File("e:/aaa/1.text");
System.out.println(file.delete());//true
//刪除E盤aaa文件下的bbb文件夾
File file1 = new File("e:/aaa/bbb");
System.out.println(file1.delete());//true
//一個(gè)非空的文件夾是刪除不了的
File file2 = new File("e:/aaa/ccc");
System.out.println(file2.delete());//false
//程序結(jié)束再刪除文件
File file3 = new File("e:/aaa/ccc/ddd");
file3.deleteOnExit();
//借助scanner對(duì)象控制程序是否結(jié)束。
new Scanner(System.in).nextInt();
}
}
File對(duì)象的判斷方法(比較常用)
boolean isFile(); 是否是文件【常用】
boolean isDirectory();是否是文件夾【常用】
boolean isHidden();是否是隱藏文件
boolean isAbsolute();是否是絕對(duì)路徑
boolean exists();判斷文件或者文件夾是否存在【重要】
package com.wyx.b_file;
import java.io.File;
import java.io.IOException;
public class Demo4 {
public static void main(String[] args) throws IOException {
//判斷是否是文件
File file = new File("e:/aaa/ccc");
System.out.println(file.isFile());//false
//判斷是否是文件夾
System.out.println(file.isDirectory());//true
//判斷是否是隱藏文件
File file1 = new File("e:/aaa/1.txt");
System.out.println(file1.isHidden());//true
//判斷是否是絕對(duì)路徑
System.out.println(file.isAbsolute());//true
//相對(duì)路徑new對(duì)象禾乘,相對(duì)于Demo4這個(gè)文件來(lái)說(shuō)
File file2 = new File("./");
System.out.println(file2.isAbsolute());//false
//判斷一個(gè)文件夾或文件是否存在澎埠,存在返回true
System.out.println(file1.exists());//true
//用途可以先判斷文件或文件夾是否存在,如果不存在再去創(chuàng)建文件或文件夾
if (!file1.exists()) {
file1.createNewFile();
}
}
}
返回值是String類型的數(shù)據(jù)
String getName(); 獲取文件或者文件夾的名字
String getPath();獲取當(dāng)前對(duì)象的路徑
String getParent();獲取當(dāng)前文件對(duì)象的上一級(jí)的目錄
package com.wyx.b_file;
import java.io.File;
import java.lang.reflect.Array;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
File file = new File("e:/aaa/ccc");
System.out.println(file.getName());
System.out.println(file.getParent());
//這個(gè)控制臺(tái)輸出的路徑是字符串始藕,雖然和sout(file)輸出的內(nèi)容一樣蒲稳,但代表意思是不一樣
System.out.println(file.getPath());
System.out.println(Arrays.toString(file.getPath().split("\\\\")));
//返回的是file對(duì)象
System.out.println(file);
}
}
返回是long類型數(shù)據(jù)的
long length();返回值是文件占用的字節(jié)數(shù)
long lastModified();獲取當(dāng)前文件最后一次修改的時(shí)間
這個(gè)是毫秒氮趋,除以1000 變成秒,才是時(shí)間戳
時(shí)間戳:從1970年1月1日00時(shí)00分00秒開始江耀,到現(xiàn)在時(shí)間剩胁,就是時(shí)間戳。
package com.wyx.b_file;
import java.io.File;
public class Demo6 {
public static void main(String[] args) {
File file = new File("e:/aaa/2.txt");
//一個(gè)漢字三個(gè)字節(jié)祥国,一個(gè)符號(hào)也是三個(gè)字節(jié)
System.out.println("占用字節(jié)數(shù)" + file.length());
System.out.println(file.lastModified());
//1682323596323 顯示的是毫秒昵观,除以1000是一個(gè)時(shí)間戳
}
}
返回值是數(shù)組類型的方法
File[] listFiles(); 獲取當(dāng)前文件夾下面的所有的文件或文件夾,
數(shù)組里面存的是對(duì)象String[] list();獲取當(dāng)前文件夾下面的所有文件或文件夾的名字
package com.wyx.b_file;
import java.io.File;
import java.util.Arrays;
public class Demo7 {
public static void main(String[] args) {
File file = new File("c:/");
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
String[] strings = file.list();
System.out.println(Arrays.toString(strings));
}
}
遞歸
需求:刪除某一個(gè)文件夾下面的所有的文件
package com.wyx.b_file;
import java.io.File;
public class Demo8 {
public static void main(String[] args) {
File file = new File("e:/aaa/bbb");
del(file);
System.out.println("遞歸結(jié)束");
}
public static void del(File file){
//取出當(dāng)前文件夾下的所有文件或者文件夾
File[] files = file.listFiles();
//遍歷對(duì)象舌稀,如果是文件刪除啊犬,如果是文件夾,遞歸
for (File file1 : files) {
if (file1.isDirectory()) {
del(file1);
}else {
file1.delete();
}
}
}
}