Files類是一個工具類,提供了大量的靜態方法來操做文件、文件夾。數組
Files類經常使用方法:工具
- long size(Path path) //返回文件大小
- boolean isDirectory(Path path) //是不是文件夾
- boolean isExecutable(Path path) //是不是可執行文件
- boolean isHidden(Path path) //是不是隱藏的
- boolean exists(Path path) //該文件/文件夾是否存在
- boolean notExists(Path path) //是否不存在
- boolean isReadable(Path path) //是否可讀
- boolean isWritable(Path path) //是否可寫
- createFile(Path filePath) //建立文件,只能是文件,不能是文件夾。若是已存在同名文件,會報錯。
- createDirectory(Path dirPath) //建立文件夾。若是已存在同名文件夾,會報錯
- createTempFile(String prefix, String suffix) //在OS的臨時文件夾中建立一個臨時文件
- createTempFile(Path dir, String prefix, String suffix) //在指定的目錄下建立一個臨時文件
prefix是文件名前綴,suffix是文件名後綴,通常是擴展名,好比「.zip」。中間會使用系統生成的一個隨機數。返回該臨時文件的Path對象(絕對路徑)。ui
- createTempDirectory(String prefix) //在OS的臨時文件夾中建立一個臨時文件夾。
- createTempDirectory(Path dir, String prefix) //在指定的目錄下建立一個臨時文件夾
文件夾名:前綴+一個系統生成的隨機數編碼
- Files.copy(Path src, Path target) //複製文件,若是存在同名的目標文件,會報錯。
- Files.copy(Path src, Path target , StandardCopyOption.REPLACE_EXISTING) //若是存在同名的目標文件,會替換
只能是文件,不能是文件夾,要複製文件夾須要遞歸複製子文件、子文件夾。目標文件名可與原文件名不一樣。spa
- Files.move(Path src, Path target) //剪切,若是目標已存在,會報錯
- Files.move(Path src, Path target , StandardCopyOption.REPLACE_EXISTING) //若是目標已存在,會替換。雖然是move,但常量仍是是StandardCopyOption.REPLACE_EXISTING。
能夠是文件、文件夾。code
在copy()、move()操做中:若是Path的中間部分路徑有不存在的,會報錯,並不會自動建立。好比複製一張圖片,目標是"D:\\test\\1.png" ,若是test不存在,會報錯。對象
剪切是一種特殊的複製,先複製,複製完成後再刪除原文件/文件夾。blog
- Files.delete(Path path) //刪除文件、空目錄。若是不存在,會報錯
- Files.deleteIfExists(Path path) //存在才刪除,不存在時不會報錯。
只能刪除文件、空目錄。若是該文件夾下包含子文件、子目錄,即使子目錄是空的,也會報錯。遞歸
要刪除有內容的文件夾,須要遞歸刪除子文件、子文件夾。圖片
查看某個盤的大小:
1 Path path=Paths.get("D;\\");
2 FileStore store=Files.getFileStore(path);
3 System.out.println(store.getTotalSpace()); //總大小。字節數
4 System.out.println(store.getUsableSpace()); //可用大小
獲取某個文件夾下全部子文件、子文件夾的路徑:
1 //只能是文件夾
2 Path path=Paths.get("D:\\二次元");
3 //列出該文件夾下全部子文件、子文件夾的路徑。
4 Files.list(path).forEach(pathItem -> System.out.println(pathItem)); //pathItem表明一個子文件/文件夾的Path對象
5
6 /*
7 D:\二次元\a.png
8 D:\二次元\c.png
9 D:\二次元\q.png
10 D:\二次元\test
11 */
讀取文本文件的全部行:
1 //只能是文本文件
2 Path path=Paths.get("D:\\二次元\\1.txt");
3 //讀取全部的行,逐行輸出
4 Files.lines(path).forEach(line->System.out.println(line)); //line表明一行
5 //可指定解碼字符集。只能是Charset對象,不能是String。
6 // Files.lines(path,Charset.forName("GBK")).forEach(line->System.out.println(line));
讀取文件內容:
- String Files.readString(Path path) //讀取全部文本,以String形式返回。會讀取換行符。只能是文本文件
- String Files.readString(Path path, Charset charset) //可指定解碼字符集
- List<String> Files.readAllLines(Path path) //讀取全部的行,以LIst<String>形式返回,一行就是一個String類型的元素。只能是文本文件
- List<String> Files.readAllLines(Path path, Charset charset) //可指定解碼字符集
- byte[] Files.readAllBytes(Path path) //讀取文件全部數據,以字節數組形式返回。文件能夠是任意類型。
寫入文件:
- Files.write(Path path, byte[] bytes) //寫入一個byte[]
- Files.writeString(Path path, CharSequence cs) //寫入一個字符序列,能夠是String、StringBuffer、StringBuilder、Char[]
- Files.writeString(Path path, CharSequence cs, Charset charset) //指定編碼字符集
以上3個方法都可在末尾指定參數個數可變的的可選參數OpenOption,經常使用的值:
-
StandardOpenOption.APPEND 追加
-
StandardOpenOption.READ 讀
-
StandardOpenOption.WRITE 寫
-
StandardOpenOption.SYNC 同步寫到磁盤文件
-
StandardOpenOption.DELETE_ON_CLOSE 關閉時刪除文件
參數個數可變,可同時使用多個預約義的值,放在參數表最後面,以逗號分隔。
建立對象:
- Files.newBufferedReader(Path path);
- Files.newBufferedReader(Path path,Charset charset); //可指定解碼字符集
- Files.newBufferedWriter(Path path);
- Files.newBufferedWriter(Path path, Charset charset); //可指定編碼字符集
以上2個方法都可指定參數個數可變的OpenOption。
- Files.newInputStream(Path path);
- Files.newOutputStream(Path path);
以上2個方法都可指定參數個數可變的OpenOption。