知識點——初識java中File類
- 2020 年 3 月 18 日
- 筆記
1.1 什麼是File類
SUN公司提供給開發者操作文件和文件夾的一個類對象。 Java中萬物皆對象,電腦中萬物皆文件
獲取File類有三種方式【Constructor 構造方法】 File(String pathName); 根據對應的文件路徑創建獲取對應的File類對象,可以是文件,可以是文件夾。
File(String parent, String child); 根據對應的父目錄文件夾路徑,以及子文件名或者子文件夾名,創建對應的File類對象
File(File parent, String child); 根據對應的父目錄文件夾File類對象,以及子文件名或者子文件夾名,創建對應File類對象
路徑: 相對路徑 . 當前工作目錄 … 父目錄/上級目錄 正對於當前工作目錄和其他文件或者文件夾之間的最小路徑
絕對路徑 唯一的路徑。 Windows作業系統 C D E F… 每一個盤符都是一個根目錄開始 C:/Windows/System32 Linux UNIX macOS 存在一個 / 目錄文件 /user/liuxiaolei/appliction
路徑有一個很重要的東西 路徑分隔符 Windows 分隔符 默認是 Linux UNIX macOS 分隔符 默認是 /
Windows是支援Linux分隔符 / 沒有任何問題
根據當前系統來區分不同的分隔符 File.separatorChar
程式碼演示:
import java.io.File; /* * 創建File類對象 */ public class Demo1 { public static void main(String[] args) { /* * 1. 路徑分隔符 \ or / or File.separator * 2. 操作文件必須帶有文件的後綴名 1.txt 2.java ... */ File file = new File("C:\aaa"); File file1 = new File("C:" + File.separator + "aaa"); File file2 = new File("C:/aaa", "1.txt"); File file3 = new File(file, "bbb"); } }
1.2 創建文件和文件夾
boolean createNewFile(); 通過File類對象調用,創建對應File類對象中保存的路徑的普通文件。 創建成功返回true,創建失敗返回false 返回false的原因: 1. 路徑不合法。 2. 對應的文件夾沒有寫入許可權。 rwxr-xr-x 3. 對應當前的文件已經存在。
boolean mkdir(); 通過File類對象調用,創建對應File類對象中保存路徑的文件夾 創建成功返回true,創建失敗返回false 返回false的原因 1. 路徑不合法。 2. 對應的文件夾沒有寫入許可權。 3. 對應當前的文件夾已經存在。
boolean mkdirs(); 通過File類對象創建其中保存的文件目錄的所有對應文件夾,包括中間路徑 如果創建失敗,返回false
boolean renameTo(File dest); 通過File類對象調用,轉為目標File類對象dest 文件/文件夾移動,重命名
1.3 刪除文件或者文件夾
boolean delete(); 通過File類對象調用,刪除對應的文件或者文件夾 【要求】 1. 刪除的文件或者文件夾都是直接抹掉數據,不是放入回收站 2. 無法刪除非空文件夾,文件夾中存在其他內容無法整體刪除。
void deleteOnExit(); 程式退出時刪除對應的文件或者文件夾 用於刪除程式運行過程中,留下的日誌文件,緩衝文件,操作日誌…
1.4 文件屬性判斷[有用]
boolean isFile(); 判斷是否是一個普通文件
boolean isDirctory(); 判斷是否是一個文件夾
boolean isAbsolute(); 判斷是否使用了絕對路徑
boolean isHidden(); 判斷是否是隱藏文件
boolean exists(); 判斷文件是否存在
1.5 獲取文件屬性
用處不大的方法 下面的方法和文件是否存在沒有一分錢關係,都可以使用字元串操作直接得到我們想要的結果 String getPath(); 獲取File類對象保存的路徑 String getName(); 獲取當前File類對象中保存的文件名或者文件夾名 String getParent(); 獲取當前File類對象對應文件或者文件夾的父目錄路徑 String getAbsolutePath(); 獲取當File類對象對應文件或者文件夾的絕對路徑
有用方法: long lastModified() 獲取文件的最後一次修改時間,返回值是一個時間戳類型。 從1970年01月01日 00:00:00到現在的秒數。電腦元年
long length(); 獲取文件的大小,佔用硬碟空間位元組數。 如果操作的是文件夾,返回0L
1.6 列表方法
static File[] listRoots(); 通過File類調用,有且針對於Windows作業系統有效,獲取當前電腦內所有根盤符對象,如果是Linux,UNIX,macOS是無效的。
File[] listFiles(); 通過File類對象調用,獲取當前File類對象對應文件夾下的所有子文件或者子文件夾的File類對象數組
String[] list(); 通過File類對象調用,獲取當前File類對象對應文件夾下的所有子文件或者子文件夾的String類型文件名或者文件夾名字數組
1.7 FilenameFilter文件名過濾器
interface FilenameFilter boolean accept(File dir, String name);
源碼展示
@FunctionalInterface public interface FilenameFilter { /** * Tests if a specified file should be included in a file list. * * @param dir the directory in which the file was found. * @param name the name of the file. * @return <code>true</code> if and only if the name should be * included in the file list; <code>false</code> otherwise. */ boolean accept(File dir, String name); }
程式碼實現:
import java.io.File; import java.io.FilenameFilter; /* * FilenameFilter過濾器演示 */ public class Demo8 { public static void main(String[] args) { File file = new File("C:\aaa\ddd"); // 使用匿名內部類的匿名對象直接作為方法的參數 File[] listFiles = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { /* * dir是當前操作的文件夾類對象 * name是當前文件夾下的子文件或者子文件夾名字 * * 獲取對應的java文件 * 1. 判斷是不是普通文件 * 2. 判斷當前文件名是不是.java結尾 */ return new File(dir, name).isFile() // endsWith字元串方法,判斷當前字元串是不是已指定要求結尾 && name.endsWith(".java"); } }); // Lambda表達式 JDK1.8新特徵 File[] listFile = file.listFiles((dir, name) -> new File(dir, name).isFile() && name.endsWith(".java") ); for (File file2 : listFile) { System.out.println(file2.getName()); } } }
2. 字元串小問題
String str = "孜然肉片"; str += "麻辣香鍋"; str += "番茄雞蛋"; str += "土豆牛肉"; str += "烤羊排"; str += "金湯肥牛"; str += "蒜蓉油麥菜"; System.out.println("這裡有幾個字元串");
這裡一共有幾個字元串?
答案: 這裡有14個字元串 使用雙引號包含的字元串都是字元串常量!!!常量的概念中要求不可以修改。 雙引號包含的字元串都是存在於記憶體的【數據區】
+ 在字元串常量操作時,使用原本的兩個字元串拼接之後完成的一個新的字元串常量。
這裡導致的字元串冗餘問題,後期會使用StringBuffer StringBuilder來解決問題。