震驚!男人看了會沉默, 女人看了會流淚! Java中的File類背後的祕密原來是這樣!
IO流之File類
IO即InputStream和OutputStream。
Java語言中提供的眾多的對計算機硬碟上的檔案進行操作的類
概述
1、Java.io包中的類。
2、在程式中需要對硬碟中的檔案進行操作,需要在程式中表示一個檔案。
3、一個File類的物件可以表示計算機中的一個檔案或目錄(資料夾)。
4、File物件可以對檔案或目錄的屬性進行操作。
5、通過File類物件可以獲取其所表示的檔案的相關資訊。
6、File類物件不能對檔案中的內容進行讀寫操作。
File類的構造方法
1、File f = new File(“String s”);直接將檔案路徑以字串形式新增進去。
2、File f = new File(“String s1”,“String s2”);將檔案父級路徑以字串形式寫在s1,檔名放在以字串形式放在s2處。
3、File f = new File(parent,“String s”);將檔案父級路徑放在File物件當中,在parent處傳入物件,檔名以字串形式放在s處。
注意:File類的構造方法是在當前目錄下建立一個與指定檔名相關聯的檔案物件,指明詳細的路徑和檔名,一定要注意使用" \ \ “或” / ",因為在Java中 " \ "是有特殊含義的。所謂絕對路徑就是完整的寫明檔案路徑,相對路徑就是隻有檔名。
File類的常用方法
返回值 | 方法名 | 功能描述 |
---|---|---|
boolean | canRead() | 判斷檔案是否可以讀取 |
boolean | canWrite() | 判斷檔案是否可以寫入 |
boolean | equals() | 判斷檔案路徑是否一致 |
boolean | exists() | 判斷檔案是否存在 |
boolean | isAbsolute() | 判斷給定的檔名是否為絕對路徑 |
boolean | isDirectory() | 判斷是否為資料夾 |
boolean | isFile() | 判斷是否為檔案 |
boolean | delete() | 刪除檔案或資料夾(必須為空資料夾),成功返回true,失敗返回false |
boolean | createNewFile() | 建立一個新檔案,存在就不建立,需要處理異常IOException |
boolean | mkdir() | 只能建立單級檔案,存在就不建立,如G : \ \demo |
boolean | mkdirs() | 可以建立多級檔案。如G:\ \ demo\ \demo |
String | getAbsolutePath() | 獲取檔案的絕對路徑 |
String | getName() | 獲取檔名 |
String | getPath() | 獲取檔案路徑 |
String | getParent() | 獲取檔案父級目錄 |
long | lastModified() | 最後一次修改檔案的時間 |
long | length() | 獲取位元組數量 |
String[ ] | list() | 返回所有指定資料夾下的檔案和資料夾名字作為字串陣列 |
File[ ] | listFiles() | 返回所有指定資料夾下的檔案和資料夾名字作為File物件陣列 |
boolean | renameTo() | 為檔案重新命名 |
程式碼示例:
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class FilePractice1 {
public static void main(String[] args) {
//構造方法1
File f = new File("G:\\test.txt");
//構造方法2
File f1 = new File("G:\\","test.txt");
//構造方法3
File f2 = new File("G:/");
File f3 = new File(f2,"test.txt");
//判斷檔案是否可以讀入
System.out.println(f.canRead());
//判斷檔案是否可以寫入
System.out.println(f.canWrite());
//判斷檔案路徑是否一致
System.out.println(f.equals(f1));
//判斷檔案是否存在
System.out.println(new File("G:\\demo.txt"));
//判斷給定檔名是否為絕對路徑
System.out.println(f.isAbsolute());
//判斷是否為資料夾
System.out.println(f.isDirectory());
//判斷是否為檔案
System.out.println(f.isFile());
//建立一個新檔案,存在就不建立,需要處理異常
try {
new File("G:\\t.md").createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.out.println("檔案路徑不正確!");
}
//建立單級檔案
new File("G:\\num").mkdir();
//建立多級檔案
new File("G:\\num\\num").mkdirs();
//獲取檔案絕對路徑
System.out.println(f.getAbsolutePath());
//獲取檔名
System.out.println(f.getName());
//獲取檔案路徑
System.out.println(f.getPath());
//獲取父級目錄
System.out.println(new File("G:\\num").getParent());
//最後一次修改時間---秒
System.out.println(f.lastModified());
//獲取位元組數量
System.out.println(f.length());
//返回指定資料夾下檔案和資料夾為字串陣列
String [] str = f2.list();
System.out.println(Arrays.toString(str));
//返回指定資料夾下檔案和資料夾為File物件陣列
File [] files = f2.listFiles();
System.out.println(Arrays.toString(files));
//為檔案重新命名
System.out.println(f.renameTo(new File("hello.txt")));
}
}
File類的使用
日期格式轉換
我們通過lastModified()獲得的檔案最後一次修改時間是一個long型的數字,跟我們所要看懂的時間完全不同,因此這裡我們需要通過日期的格式轉換將時間轉換為人們能懂的形式,詳細的日期轉換可以看一看這篇部落格link
程式碼示例
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FilePractice2 {
public static void main(String[] args) {
File file = new File("G:\\text.txt");
long l = file.lastModified();
System.out.println(l);//1606495736813
Date date = new Date(l);
SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str = sdf.format(date);
System.out.println(str);//2020年11月28日 00:48:56
}
}
按需求獲取檔名
我們通過list()或者listFile()獲得的檔案目錄下的檔名是指定檔案目錄下的所有檔案,但是有時我們只是需要指定目錄下的一部分指定型別的檔案,比如我只需要txt檔案,這時File類提供的方法就不能夠滿足我們的需要了,因此我們需要自己設計按需返回。
介紹一個介面FilenameFilter , 這個介面的目的就是篩選檔案型別,其內部的方法就只有accept(File dir, String name),當返回為true時就滿足篩選條件,為false就不滿足, 這是list()用的.
程式碼示例—list()返回String[]
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
public class FilePractice3 {
public static void main(String[] args) {
File file = new File("G:\\Demo2");
String[] str = file.list();
System.out.println("G:\\Demo2下的所有檔案為"+Arrays.toString(str));
// G:\Demo2下的所有檔案為
// [Demo.md, Demo1, Demo3, test - 副本 (2).txt, test - 副本 (3).txt,
// test - 副本 (4).txt, test - 副本.txt, test.txt]
String[] str1 = file.list(new FilenameFilter() {//通過匿名內部類實現篩選txt
@Override
public boolean accept(File dir, String name) {
return (name.substring(name.lastIndexOf(".")+1)).equals("txt");
}
});
for (String s:str1) {
System.out.print(s+"\t");
}
// test - 副本 (2).txt test - 副本 (3).txt
// test - 副本 (4).txt test - 副本.txt test.txt
}
}
再介紹一個介面FileFilter , 這個介面的目的也是篩選檔案型別,其內部的方法就只有accept(File pathname),當返回為true時就滿足篩選條件,為false就不滿足, 這是listFile()用的.
程式碼示例—listFile( )返回File[ ]
import java.io.File;
import java.io.FileFilter;
public class FilePractice4 {
public static void main(String[] args) {
File file = new File("G:\\Demo2");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return (pathname.getName().substring(pathname.getName().lastIndexOf(".")+1)).equals("txt");
}
});
for (File f:files) {
System.out.println(f+"\t");
}
}
相關文章
- 看了就會的next.js路由JS路由
- 原來 CSS 這樣寫是會讓 app 崩潰的CSSAPP
- 驚了!原來瀏覽器的祕密藏在這31張圖裡!瀏覽器
- 看了這篇還不會Linux效能分析和優化,你來打我Linux優化
- 看了這篇你就會手寫RPC框架了RPC框架
- 看了絕對不會後悔之:spring Ioc原理Spring
- 看了絕對不會後悔之:spring AOP原理Spring
- 震驚!新冠檢測的貓膩原來在這裡!
- JavaScript 中的原型原來是這樣的JavaScript原型
- MVVM原理,你看了也會vue MVVMMVVMVue
- 男人是藍芽,女人是WiFi藍芽WiFi
- 當初要是看了這篇,React高階元件早會了React元件
- 原來你是這樣子的OpenAI!來看看它背後那些有趣的人和事OpenAI
- 自從看了中國有嘻哈之後,程式設計師合 PR 的畫風是這樣的……程式設計師
- 震驚--Nginx的map指令還能這樣用Nginx
- [譯]震驚!RxJava 5 個不為人知的小祕密RxJava
- 刷臉背後,卷積神經網路的數學原理原來是這樣的卷積神經網路
- ZooKeeper 會話的祕密會話
- 原來你是這樣的FlutterFlutter
- 原來你是這樣的switch~
- 原來你是這樣的PromisePromise
- 原來你是這樣的GitGit
- 當 Flutter 遇見 Web,會有怎樣的祕密 ?FlutterWeb
- 在迴圈中做查詢,看了自己介面效能驚呆了
- 原來那個騷擾電話是AI打的!315晚會曝光的這“鍋”AI背不背?AI
- 看了這7篇論文,你會完全掌握卷積神經網路!卷積神經網路
- 【奶奶看了都會】AI老照片修復影片教程AI
- 原來JavaScript是這樣執行的JavaScript
- 原來Stable Diffusion是這樣工作的
- 隱藏在Web除錯背後的祕密Web除錯
- 美國爆紅手機遊戲背後的祕密遊戲
- 震驚!喝個茶的時間就學會了vuexVue
- 大廠各種佈局雲遊戲的背後,會有怎樣的未來?遊戲
- 入職第一天,看了公司程式碼,牛馬沉默了。。
- Java集合看了這篇爛文 就夠了(不要臉的說)Java
- 揭祕山姆會員店,棄售活鮮背後的思考
- 原來CNN是這樣提取影像特徵的。。。CNN特徵
- 原來你是這樣的http2......HTTP