JavaSE學習筆記 - File類與遞迴
阿新 • • 發佈:2020-08-27
- 主要用於檔案和目錄的建立、刪除和查詢等操作,Java 把電腦中的檔案封裝成了 File 類,在編寫程式碼的時候我們可以使用 File 類來對檔案或者資料夾進行操作。
分隔符
public class Main { public static void main(String[] args) { //路徑分隔符,在window中,分割兩個路徑使用 ";" //在linux中分割兩個路徑使用 ":" String pathSeparator = File.pathSeparator; System.out.println(pathSeparator); // ; //檔名稱分隔符,在window中檔名稱使用 "\" 來分隔 //在linux中使用 "/" 來分隔檔名稱 String separator = File.separator; System.out.println(separator);// \ } }
構造方法
public class Main { public static void main(String[] args) { File file = new File("C:\\Users\\17388\\Desktop\\1.txt"); System.out.println(file); //C:\Users\17388\Desktop\1.txt String parent = "C:\\Users\\17388\\Desktop"; String child = "1.txt"; File file1 = new File(parent, child); System.out.println(file1); } }
常用方法
public class Main { public static void main(String[] args) throws IOException { File file = new File("1.txt"); System.out.println(file); //1.txt,toString內部呼叫了getPath //獲取檔案絕對路徑 System.out.println(file.getAbsolutePath());//D:\Computer\Project\java\1.txt //獲取建立時的路徑 System.out.println(file.getPath());//1.txt //獲取檔名 System.out.println(file.getName());//1.txt //獲取檔案的位元組數,如果不是檔案或者檔案不存在返回0 System.out.println(file.length()); //判斷檔案是否存在 System.out.println(file.exists());//false //判斷是否是檔案,路徑不存在返回false System.out.println(file.isFile());//false //判斷當前路徑是否是目錄,路徑不存在返回false System.out.println(file.isDirectory());//false //檔案不存在則建立檔案,否則不建立,只能建立檔案 boolean flag = file.createNewFile(); System.out.println(flag);//true if (file.exists()) { System.out.println(file.isFile());//true System.out.println(file.isDirectory());//false } File file1 = new File("1"); //建立單級目錄 boolean flag1 = file1.mkdir(); System.out.println(flag1);//true File file2 = new File("11\\111"); //建立多級目錄 boolean flag2 = file2.mkdirs(); System.out.println(flag2);//true //刪除檔案或者目錄 System.out.println(file.delete()); System.out.println(file1.delete()); System.out.println(file2.delete()); } }
遍歷目錄
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Computer\\Project\\java");
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
}
}
遞迴讀取目錄及其子目錄檔案
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Computer\\Project\\java");
printAllFile(file);
}
private static void printAllFile(File file) {
System.out.println(file);
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()) {
System.out.println(file1);
} else {
printAllFile(file1);
}
}
}
}
遞迴查詢指定條件檔案
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Computer\\Project\\java");
printAllFile(file);
}
private static void printAllFile(File file) {
//System.out.println(file);
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isFile()) {
if(file1.getName().toLowerCase().endsWith(".iml")) {
System.out.println(file1);
}
} else {
printAllFile(file1);
}
}
}
}
檔案過濾器
- 使用 FileFilter 過濾器介面,在遍歷目錄的同時,呼叫其中的 accept 方法將其中不符合要求的檔案過濾掉,然後在進行判斷輸入即可。(面向介面程式設計)
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("D:\\Computer\\Project\\java");
printAllFile(file);
}
private static void printAllFile(File file) {
//我們在遍歷目錄的同時,呼叫了過濾器中的方法,將不符合要求的檔案過濾掉
// File[] files = file.listFiles(new FileFilter() {
// @Override
// public boolean accept(File pathname) {
// if (pathname.isDirectory()) {
// return true;
// } else {
// return pathname.getName().toLowerCase().endsWith(".iml");
// }
// }
// });
// for (File file1 : files) {
// if(file1.isDirectory()) {
// printAllFile(file1);
// } else {
// System.out.println(file1);
// }
// }
File[] files1 = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isDirectory() ||
name.toLowerCase().endsWith(".java");
}
});
for (File file1 : files1) {
if (file1.isDirectory()) {
printAllFile(file1);
} else {
System.out.println(file1);
}
}
}
}