File相關
- File對象
- 類路徑
- 文件過濾器
- 案例:遞歸刪除多級目錄
File對象
File對象是什麼
文件或者目錄
File對象的創建
-
File(File parenet,String childPathName)
-
File(String pathname)
- 只是在JVM中創建了一個file對象,與本地無關
-
File(String parentPathName,String childPathName)
-
File(URI uri)
-
URI:統一資源標識符
- C:\winods\ …
- \ubt\home\ …
-
URL:網絡資源標識符
- http:// …
- https:// …
- ftp:// …
-
絕對路徑:從盤符/根目錄出發的路徑
相對路徑:從當前目錄出發的路徑,Java中的默認相對路徑是工程所在目錄
Java中,“\”代表轉義字符,不能作爲路徑的分割符
- 可以使用“/”代替
- 可以使用“\ \”代替
File對象的常用方法
- boolean exist():file對象是否存在於本地
- boolean isDirectory():file對象是否是目錄
- boolean isFile():file是否是文件
- boolean mkdir():若file對象不存在,則創建一個file目錄
- 只能創建一級目錄,不能創建多級目錄
- boolean mkdirs():若file對象不存在,則創建一個多級目錄
- boolean createNewFile():若file對象不存在,則創建一個file文件
- 若file對象存在於多級目錄之中,則多級目錄必須存在;若不存在,將拋出異常
- String getName():獲取file對象的名字
- String getPath():獲取file對象的路徑
- int length():獲取file對象的長度
- long lastModified():獲取file對象最後一次被修改的時間
- boolean delete():刪除file對象
- 只能刪除文件或者空目錄,無法刪除多級目錄
注意1:同一個file對象只能選擇mkdir()、createNewFile()中的一種使用,若兩種方法同時使用,後面的方法不起作用(前面的方法執行後,本地已存在file對象)
類路徑
classpath,也叫classes
- Java中的默認類路徑:Java工程下的src目錄中的文件編譯後的目標目錄—>Java工程下的bin目錄
.Java文件被編譯成.class文件,無法被編譯的文件原封不動地複製過去
動態獲取絕對路徑
- 類加載器的作用:將.class文件加載到JVM
- 類加載器的種類:三種,其中兩種用來加載jre中的類庫,剩下一種用來加載程序員寫的類
- 類加載器的使用:
package day20191112;
public class Demo01 {
public void ClassLoaderTest() {
//獲取類加載器
ClassLoader cl = Demo01.class.getClassLoader();
//獲取***當前src目錄下的“目標文件”***的絕對路徑
String path = cl.getResource("day20191112/demo.txt").getPath();
System.out.println(path);
}
}
package day20191112;
public class Demo01 {
public void ClassLoaderTest() {
//獲取***當前包下的目標文件***的絕對路徑
String path = Demo01.class.getResource("demo.txt").getPath();
System.out.println(path);
}
}
同一個工程下的所有類共用一個類加載器
文件過濾器
package day20191113;
import java.io.File;
import java.io.FileFilter;
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes\\複習\\Collection&Map");
if(file.isDirectory()) {
//listFiles():返回file對象下的所有文件/目錄(不包括目錄下的內容)
File[] files = file.listFiles(new FileFilter() {
/**
* FileFilter是一個抽象類,使用匿名內部類的方式進行實例化
* file:要篩選的文件對象
* 返回值爲true,表示該文件對象要保留;反之,表示該文件對象被過濾
*/
public boolean accept(File file) {
// TODO Auto-generated method stub
return file.getName().endsWith(".md");
}
});
for(File f : files) {
System.out.println(f.getName());
}
}
}
}
案例:遞歸刪除多級目錄
package day20191113;
import java.io.File;
public class Demo02 {
public static void main(String[] args) {
DeleteFile deleteFile = new DeleteFile();
deleteFile.doIt();
}
}
class DeleteFile{
public void doIt() {
File file = new File("D:\\BaiDu\\BaiduNetdiskDownload\\MyNotes");
delete(file);
}
public void delete(File file) {
File[] files = file.listFiles();
for(File f : files) {
/**
* 如果是f是文件,則直接刪除;如果不是文件,則進入遞歸
*/
if(f.isFile()) {
f.delete();
}else {
delete(f);
}
}
file.delete();
}
}