課程大綱
- 文件操作的簡介
- 絕對路徑和相對路徑
- 分隔符
- File類(重點)
1. 文件操作的簡介
顧名思義, 操作磁盤上的某一個文件或者某一個文件夾。 可以對他們進行創建、 刪除、 移動、 屬性獲取、 屬性設置等操作。 但是, 並不包含讀取文件的內容、 拷貝文件。
在Java中, 使用 java.io.File
類描述一個文件, 或者是一個文件夾。
2. 絕對路徑和相對路徑
2.1. 相關概念
路徑: 用來描述一個文件所在的地址, 用來定位一個文件的。 可以分爲絕對路徑和相對路徑。
絕對路徑: 從磁盤的根目錄開始, 一層層的向下查找, 直到找到這個文件。
例如:
C:\Users\luds\Desktop\集合\assets\map.png
C:\shawn\documents\JavaPDF\IO流.pdf
相對路徑: 找到一個參照物, 相對於這個參照物的路徑。
例如:
assets/collection.png
2.2. 對比
3. 分隔符
3.1. 分隔符的簡介
在描述路徑的字符串中, 有兩種分隔符, 是比較常見的: 目錄分隔符 和 路徑分隔符。
目錄分隔符
分隔開一個路徑中的不同的文件夾, 用來描述層級關係、 包含關係。
在不同的操作系統中, 目錄分隔符是不一樣的。 在windows中, 使用 \
作爲目錄分隔符; 在非windows的操作系統中, 例如: Linux、Unix.. 使用的是 /
作爲目錄分隔符。
理論上來講, 在windows中, 應該使用\作爲目錄分隔符。 但是在有些情況下, 使用/也是可以做目錄分隔符的。
路徑分隔符
分隔開一個字符串中的多個路徑的。
在不同的操作系統中, 路徑分隔符是不一樣的。 在windows中, 使用 ;
作爲路徑分隔符; 在非windows的操作系統中, 例如: Linux、Unix.. 使用的是 :
作爲路徑分隔符。
3.2. 分隔符的表示
如果你的程序只需要考慮部署在windows平臺, 那麼只需要按照windows的規範書寫就可以; 如果你的程序只需要部署到linux上, 那麼只需要按照linux的規範書寫就可以。 但是, 如果你的程序需要考慮在不同的平臺上部署運行, 此時就需要使用以下方法進行分隔符的獲取。
4. File類
4.1. File類的簡介
File是 http://java.io 包中的一個類。 是對磁盤上的某一個文件、文件夾(目錄)的描述。 所謂的文件操作, 其實都是需要使用這個類來完成的。
4.2. File類的構造方法
import java.io.File;
/**
* @Description File類的構造方法
*/
public class Program {
public static void main(String[] args) {
// 1. File(String pathname)
// 如果這個路徑下的文件不存在,不影響File對象的實例化。
File file = new File("C:\\Users\\luds\\Desktop\\dis_hash.png");
System.out.println(file.exists());
// 2. File(String parent, String child)
// 在這個構造方法中,會將parent與child合併在一起
File file1 = new File("C:\\Users\\luds\\Desktop", "dis_hash.png");
System.out.println(file1);
System.out.println(file1.exists());
// 3. File(File parent, String child)
// 在構造方法中,將parent的路徑和child進行拼接,得到一個新的路徑
File desktop = new File("C:\\Users\\luds\\Desktop");
File file2 = new File(desktop, "dis_hash.png");
System.out.println(file2);
System.out.println(file2.exists());
}
}
4.3. File類的常用的方法
4.3.1. 文件屬性獲取方法
import java.io.File;
import java.util.Date;
/**
* @Description File類中的常用的方法
*/
public class FileOperation {
public static void main(String[] args) {
// 實例化一個對象
File file = new File("src\\day24\\cFiles\\FileOperation.java");
// 1. 判斷一個File對象指向的路徑上是否有文件或者文件夾
System.out.println("exists = " + file.exists());
// 2. 判斷一個File對象指向的路徑上是否是一個文件
System.out.println("isFile = " + file.isFile());
// 3. 判斷一個File對象指向的路徑上是否是一個目錄
System.out.println("isDir = " + file.isDirectory());
// 4. 獲取一個文件的大小(注:只能獲取文件的大小,不能獲取文件夾的大小)
System.out.println("length = " + file.length());
// 5. 判斷一個文件(目錄)是否是隱藏的
System.out.println("hidden = " + file.isHidden());
// 6. 判斷文件(目錄)的權限
System.out.println("read = " + file.canRead()); // 可讀權限
System.out.println("write = " + file.canWrite()); // 可寫權限
System.out.println("execute = " + file.canExecute()); // 可執行權限
// 7. 獲取文件的名字
System.out.println("name = " + file.getName());
// 8. 獲取文件的路徑
System.out.println("path = " + file.getPath()); // 相對路徑
System.out.println("absolutePath = " + file.getAbsolutePath()); // 絕對路徑
// 9. 獲取父級文件夾的路徑(字符串)
System.out.println("parent = " + file.getParent());
// 10. 獲取父級文件夾(File對象)
System.out.println("parentFile = " + file.getParentFile());
// 11. 獲取文件上次修改的時間(時間戳)
System.out.println("lastModified = " + file.lastModified());
System.out.println(new Date(file.lastModified()));
}
}
4.3.2. 文件操作方法
import java.io.File;
import java.io.IOException;
/**
* @Description 文件的操作
*/
public class FileOperation2 {
public static void main(String[] args) {
// 實例化一個File對象
File file = new File("C:\\Users\\luds\\Desktop\\abc\\a\\b\\c");
try {
// 1. 創建文件
boolean flag = file.createNewFile();
System.out.println(flag);
} catch (IOException e) {
e.printStackTrace();
}
// 2. 創建文件夾(只能創建一級文件夾)
boolean flag = file.mkdir();
System.out.println(flag);
// 3. 創建文件夾(創建多級文件夾)
boolean flag = file.mkdirs();
System.out.println(flag);
// 4. 刪除文件(目錄)(可以刪除文件,也可以刪除空文件夾)
// 謹慎使用: 這個方法,可以將文件直接從磁盤刪除,不經過回收站。沒有撤銷的餘地。
boolean flag = file.delete();
System.out.println(flag);
// 5. 文件的重命名
File src = new File("C:\\Users\\luds\\Desktop\\abc");
File dst = new File("C:\\Users\\luds\\Desktop\\ABC");
System.out.println(src.renameTo(dst));
// 5.1. 藉助重命名,實現文件的移動
File src1 = new File("C:\\Users\\luds\\Desktop\\DIS_HASH.png");
File dst1 = new File("C:\\Users\\luds\\Desktop\\ABC\\dis_hash.png");
System.out.println(src1.renameTo(dst1));
}
}
4.3.3. 子文件獲取
import java.io.File;
/**
* @Description 獲取某一個目錄下的所有的內容
*/
public class FileOperation4 {
public static void main(String[] args) {
// 實例化一個File對象
File file = new File("C:\\Users\\luds\\Desktop");
// 1. 列舉一個目錄下所有的子文件的名字
String[] names = file.list();
for (String name : names) {
System.out.println(name);
}
// 2. 列舉一個目錄下所有的子文件的名字
// 帶有過濾信息的。
String[] names1 = file.list((f, name) -> {
// f: 父級文件夾的File對象
// name: 子文件的名字
// 返回值: 如果是true,將會在結果的數組中展示
return name.startsWith(".");
});
for (String s : names1) {
System.out.println(s);
}
// 3. 列舉一個目錄下所有的子文件(以File對象的方式)
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
// 4. 列舉一個目錄下所有的滿足指定條件的子文件
File[] files1 = file.listFiles(File::isHidden);
for (File file1 : files1) {
System.out.println(file1);
}
// 5. 舉一個目錄下所有的滿足指定條件的子文件
File[] files2 = file.listFiles((f, n) -> new File(f, n).isHidden());
}
}