來源:尚硅谷:http://www.gulixueyuan.com/course/311
File類的使用
- java.io.File類:文件和文件目錄路徑的抽象表示形式,與平臺無關
- File 能新建、刪除、重命名文件和目錄,但 File 不能訪問文件內容本身。 如果需要訪問文件內容本身,則需要使用輸入/輸出流。
- 想要在Java程序中表示一個真實存在的文件或目錄,那麼必須有一個File對 象,但是Java程序中的一個File對象,可能沒有一個真實存在的文件或目錄。
- File對象可以作爲參數傳遞給流的構造
File 類的使用:常用構造器
- public File(String pathname):
- 以pathname爲路徑創建File對象,可以是絕對路徑或者相對路徑,如果 pathname是相對路徑,則默認的當前路徑在系統屬性user.dir中存儲。
- 絕對路徑:是一個固定的路徑,從盤符開始
- 相對路徑:是相對於某個位置開始
- 以pathname爲路徑創建File對象,可以是絕對路徑或者相對路徑,如果 pathname是相對路徑,則默認的當前路徑在系統屬性user.dir中存儲。
- public File(String parent,String child):
- 以parent爲父路徑,child爲子路徑創建File對象。
- public File(File parent,String child):
- 根據一個父File對象和子文件路徑創建File對象
File 類的使用:常用方法
File類的獲取功能
public String getAbsolutePath():獲取絕對路徑
public String getPath() :獲取路徑
public String getName() :獲取名稱
public String getParent():獲取上層文件目錄路徑。若無,返回null
public long length() :獲取文件長度(即:字節數)。不能獲取目錄的長度。
public long lastModified() :獲取最後一次的修改時間,毫秒值
如下的兩個方法適用於文件目錄:
public String[] list() :獲取指定目錄下的所有文件或者文件目錄的名稱數組
public File[] listFiles() :獲取指定目錄下的所有文件或者文件目錄的File數組
File類的重命名功能
- public boolean renameTo(File dest):把文件重命名爲指定的文件路徑
File類的判斷功能
public boolean isDirectory():判斷是否是文件目錄
public boolean isFile() :判斷是否是文件
public boolean exists() :判斷是否存在
public boolean canRead() :判斷是否可讀
public boolean canWrite() :判斷是否可寫
public boolean isHidden() :判斷是否隱藏
File類的創建功能
創建硬盤中對應的文件或文件目錄
public boolean createNewFile() :創建文件。若文件存在,則不創建,返回false
public boolean mkdir() :創建文件目錄。如果此文件目錄存在,就不創建了。如果此文件目錄的上層目錄不存在,也不創建。
public boolean mkdirs() :創建文件目錄。如果此文件目錄存在,就不創建了。如果上層文件目錄不存在,一併創建
注意事項:如果你創建文件或者文件目錄沒有寫盤符路徑,那麼,默認在項目 路徑下
File類的刪除功能
public boolean delete():刪除文件或者文件夾
刪除注意事項:
- Java中的刪除不走回收站。
- 要刪除一個文件目錄,請注意該文件目錄內不能包含文件或者文件目
File類的練習
練習一:
@Test
public void test1() throws IOException {
File file = new File("D:\\io\\io1\\hello.txt");
//創建一個與file同目錄下的另外一個文件,文件名爲:haha.txt
File destFile = new File(file.getParent(),"haha.txt");
boolean newFile = destFile.createNewFile();
if(newFile){
System.out.println("創建成功!");
}
}
練習二:
//方式一:
@Test
public void test1(){
File srcFile = new File("d:\\code");
String[] fileNames = srcFile.list();
for(String fileName : fileNames){
if(fileName.endsWith(".jpg")){
System.out.println(fileName);
}
}
}
//方式二:
@Test
public void test2(){
File srcFile = new File("d:\\code");
File[] listFiles = srcFile.listFiles();
for(File file : listFiles){
if(file.getName().endsWith(".jpg")){
System.out.println(file.getAbsolutePath());
}
}
}
練習三:
//方式一:使用遞歸
public static void main(String[] args) {
// 遞歸:文件目錄
/** 打印出指定目錄所有文件名稱,包括子文件目錄中的文件 */
// 1.創建目錄對象
File dir = new File("E:\\teach\\01_javaSE\\_尚硅谷Java編程語言\\3_軟件");
// 2.打印目錄的子文件
printSubFile(dir);
}
public static void printSubFile(File dir) {
// 打印目錄的子文件
File[] subfiles = dir.listFiles();
for (File f : subfiles) {
if (f.isDirectory()) {// 文件目錄
printSubFile(f);
} else {// 文件
System.out.println(f.getAbsolutePath());
}
}
}
// 方式二:循環實現
// 列出file目錄的下級內容,僅列出一級的話
// 使用File類的String[] list()比較簡單
public void listSubFiles(File file) {
if (file.isDirectory()) {
String[] all = file.list();
for (String s : all) {
System.out.println(s);
}
} else {
System.out.println(file + "是文件!");
}
}
// 列出file目錄的下級,如果它的下級還是目錄,接着列出下級的下級,依次類推
// 建議使用File類的File[] listFiles()
public void listAllSubFiles(File file) {
if (file.isFile()) {
System.out.println(file);
} else {
File[] all = file.listFiles();
// 如果all[i]是文件,直接打印
// 如果all[i]是目錄,接着再獲取它的下一級
for (File f : all) {
listAllSubFiles(f);// 遞歸調用:自己調用自己就叫遞歸
}
}
}
擴展1:
// 拓展1:求指定目錄所在空間的大小
// 求任意一個目錄的總大小
public long getDirectorySize(File file) {
// file是文件,那麼直接返回file.length()
// file是目錄,把它的下一級的所有大小加起來就是它的總大小
long size = 0;
if (file.isFile()) {
size += file.length();
} else {
File[] all = file.listFiles();// 獲取file的下一級
// 累加all[i]的大小
for (File f : all) {
size += getDirectorySize(f);// f的大小;
}
}
return size;
}
擴展2:
// 拓展2:刪除指定的目錄
public void deleteDirectory(File file) {
// 如果file是文件,直接delete
// 如果file是目錄,先把它的下一級幹掉,然後刪除自己
if (file.isDirectory()) {
File[] all = file.listFiles();
// 循環刪除的是file的下一級
for (File f : all) {// f代表file的每一個下級
deleteDirectory(f);
}
}
// 刪除自己
file.delete();
}