File(文件對象)
IO流意味着輸入輸出,就是磁盤文件、內存等其他與程序進行交互(讀數據,寫數據)
常見的如記事本的保存功能:
點擊保存就是將字符寫到文件中永久保存
開發中常見的就是將日誌文件保存
File介紹
java中的File類描述的是計算機中的文件和文件夾
而不只是文件
- 構造方法
public File(File parent,String child) //文件的抽象路徑名(文件的路徑+文件名)
public File(String pathname)
public File(String parent,String child) // parent + child 就是上面的pathname
創建File對象
以下只是抽象路徑的描述,而不是真的在磁盤上創建了一個文件或者文件夾
File file1 = new File("C:/test.txt"); //不代表的文件
File file2 = new File("C:/xx"); //此處不代表是文件夾
創建文件
這裏是真正的在計算機上創建了一個文件
用到的方法 :public boolean createNewFile()throws IOException
Code:
File file1 = new File("C:/test.txt");
file1.createNewFile(); //這裏表示在C盤創建了一個test.txt的文件
File file = new File("C:/xx");
file.createNewFile(); //在C盤下創建了一個xx的文件,注意:這裏不是文件夾,還是文件,只是沒有後綴名而已
注意事項:
1.需要File對象調用:根據File對象中的pathname來創建文件
2.如果文件已經存在,返回false
3.如果文件路徑不存在,拋出IO異常
4.此方法只能夠創建文件,不會創建文件夾
創建文件夾
這裏是真正的在計算機上創建了一個文件
用到的方法 :
1.public boolean mkdir() //創建目錄,但是不能創建父路徑
2.public boolean mkdirs() //會創建父路徑
具體見代碼
Code:
File file1 = new File("C:/a");
file1.mkdir(); //這裏表示在C盤創建了一個a的文件夾
File file = new File("C:/xx/oo");
file.mkdir(); //此處會報錯,因爲c盤中沒有xx的目錄(就是上面說的父路徑)
File file = new File("C:/xx/oo");
file.mkdirs(); //創建成功,會在C盤創建xx, xx下面創建oo
刪除文件
不管文件夾還是文件,都可以調用此方法刪除
**Method:**
public boolean delete()
注意事項:
1.需要File對象來調用(把File對象所關聯的文件從磁盤上面刪除)
2.如果是刪除文件夾,必須是空文件夾
3.文件就直接刪除
4.希望 : 有一個方法可以直接刪除文件和文件夾(包括子文件夾和文件的)
直接刪除文件和文件夾(包括子文件夾和文件的)
遞歸刪除
/**
* 刪除當前目錄及其下面的目錄和文件
* @param file 刪除承成功返回true,
* 如果file==null,返回false,如果file不存在,返回false
*/
public static boolean deleteAll(File file) {
//判斷文件是否爲null
if (file == null)
return false;
if (!file.exists())
return false;
if (file.isFile())
file.delete();
if (file.isDirectory()) {
//得到文件夾所有的文件
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
deleteAll(file2);
}
}
return file.delete();
}
File基本方法及應用
public boolean isDirectory() //判斷是否是一個目錄
public boolean isFile() //判斷是否是一個文件
public boolean exists() //測試此抽象路徑名錶示的文件或目錄是否存在
public static File[] listRoots() // 列出可用的文件系統根(操作系統上面的盤符)
作用: 先判斷電腦上有哪些盤符,然後在制定的位置創建文件夾或者文件
public String[] list() //返回當前的文件夾對象下面一層的所有的文件(文件夾)的名字
public File[] listFiles() //返回當前的文件夾對象下面一層的所有的文件(文件夾)(File對象的形式)
其他請查API
Code:
public static void main(String[] args) {
File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
List<File> fileFilter = fileFilter(file, "txt");
System.out.println(fileFilter);
}
/**
* 返回當前目錄下過濾後的文件
* @param file 抽象路徑
* @param suffix 後綴名(什麼格式的)
*/
public static List<File> fileFilter(File file, String suffix) {
if (file == null)
return null;
if (!file.exists())
return null;
// *1.獲取到當前目錄下的所有file對象
File[] listFiles = file.listFiles();
//獲取到的有可能爲null
if (listFiles == null)
return null;
//如果不是null
//判斷是否是空目錄
if (listFiles.length <= 0)
return null;
List<File> list = new ArrayList<>();
// *2.判斷是不是文件,文件纔有後綴名
for (File fi : listFiles) {
if (fi.isFile()) {
// *3.判斷是不是以suffix結尾的,如果是加入到集合中
if (fi.getName().endsWith("."+suffix))
list.add(fi);
}
}
return list;
}
列出隱藏文件
/**
* 列出所有隱藏文件
* @param file 抽象路徑
*/
public static List<File> listHiddenFiles(File file) {
if (file == null)
return null;
if (!file.exists())
return null;
//*1.獲取到當前目錄下的所有file對象
File[] listFiles = file.listFiles();
//獲取到的有可能爲null
if (listFiles == null)
return null;
//如果不是null
//判斷是否是空目錄
if (listFiles.length <= 0)
return null;
List<File> list = new ArrayList<>();
// *2.判斷是不是文件
for (File fi : listFiles) {
if (fi.isFile()) {
// *3.判斷是否是隱藏文件
if (fi.isHidden()) {
list.add(fi);
}
}
}
return list;
}
文件名和文件過濾器
調用的時候指定具體的過濾器來得到我們想要的一個目錄下面的東西
過濾器的接口(FilenameFilter, FileFilter)
具體實現需要自己繼承接口覆寫方法
**Method:**
String[] list(FilenameFilter filter)
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
**Code:**
我這裏採用的是匿名內部類,就沒有再寫一個類去實現了
public static void main(String[] args) {
File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
//返回所有過濾的文件名
String[] list = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//判斷文件名是否是以.txt結尾的
return name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(list));
}